gpt4 book ai didi

parsing - 为什么 ANTLR 不解析整个输入?

转载 作者:行者123 更新时间:2023-12-02 21:26:41 25 4
gpt4 key购买 nike

我对 ANTLR 还很陌生,所以这可能是一个简单的问题。
我定义了一种简单的语法,它应该包含带有数字和标识符的算术表达式(以字母开头并以一个或多个字母或数字继续的字符串。)

语法如下:

grammar while;

@lexer::header {
package ConFreeG;
}

@header {
package ConFreeG;

import ConFreeG.IR.*;
}

@parser::members {
}

arith:
term
| '(' arith ( '-' | '+' | '*' ) arith ')'
;

term returns [AExpr a]:
NUM
{
int n = Integer.parseInt($NUM.text);
a = new Num(n);
}
| IDENT
{
a = new Var($IDENT.text);
}
;

fragment LOWER : ('a'..'z');
fragment UPPER : ('A'..'Z');
fragment NONNULL : ('1'..'9');
fragment NUMBER : ('0' | NONNULL);
IDENT : ( LOWER | UPPER ) ( LOWER | UPPER | NUMBER )*;
NUM : '0' | NONNULL NUMBER*;

fragment NEWLINE:'\r'? '\n';
WHITESPACE : ( ' ' | '\t' | NEWLINE )+ { $channel=HIDDEN; };

我正在使用 ANTLR v3 和 ANTLR IDE Eclipse 插件。当我使用解释器解析表达式 (8 + a45) 时,仅生成解析树的一部分:

alt text

为什么第二项(a45)没有被解析?如果两项都是数字,也会发生同样的情况。

最佳答案

您需要创建一个包含 EOF(文件结尾)标记的解析器规则,以便解析器将被迫遍历整个标记流。

将此规则添加到您的语法中:

parse
: arith EOF
;

并让解释器从该规则开始,而不是从 arith 规则开始:

alt text

关于parsing - 为什么 ANTLR 不解析整个输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2579118/

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