gpt4 book ai didi

java - 使用标记解析表达式

转载 作者:太空宇宙 更新时间:2023-11-04 14:04:54 24 4
gpt4 key购买 nike

我想为以下语法编写一个递归下降解析器

term ---> FINAL | FUNCTION_A (term, term) | FUNCTION_B (term, term)

目前我正在努力处理函数部分,因为我不知道如何处理命令包含嵌套函数的情况,例如

FUNCTION_A (FUNCTION_B (FINAL, FINAL), FINAL)

我读过很多教程,但没有一个真正帮助我解决这个问题。据我所知,可以使用 StringTokenizer 来解决这个问题。

如何使用 token 来识别上述示例中 FUNCTION_A 的第一项和第二项?

最佳答案

如果您知道以下情况,我们深表歉意。递归下降解析器就是这样的:

boolean parseTerm() {
return parseFinal() || parseFunctionA() || parseFunctionB();
}

boolean parseFunctionA() {
if (!scannedToken("FUNCTION_A")) {
return false;
}
mustScan("(");
must(parseTerm());
mustScan(",");
must(parseTerm());
mustScane(")");
return true;
}

StringTokenizer 将整个文本作为字符串处理,并用分隔符分隔标记。它也不区分标识符、数字等。

一个Scanner似乎更合适。它对整个 token 进行 hasNext(pattern) 测试。同样,标识符/名称的字边界并不是立即可用的。

boolean scannedToken(String s) {
Pattern pattern = Pattern.compile("\\b" + Pattern.quote(s) + "\\b");
if (scanner.hasNext(pattern)) {
String actual = scanner.next(pattern);
return true;
}
return false;
}

关于java - 使用标记解析表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28967651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com