gpt4 book ai didi

ANTLR4:找不到符号操作

转载 作者:行者123 更新时间:2023-12-03 01:46:52 25 4
gpt4 key购买 nike

我正在做 ANTLRv4 书中的 Calc/Labeled Expression 教程,当我编译时,我得到了这个:

EvalVisitor.java:33: error: cannot find symbol
if ( ctx.op.getType() == CalcParser.MUL || ctx.op.getType() == CalcParser.MIDDOT ) {
^
symbol: variable op
location: variable ctx of type MulDivContext

公平地说,我稍微修改了它。我的语法如下:

expr    : expr ( STAR | FSLASH | DIVIDE | MIDDOT ) expr     # MulDiv

这些是在 CommonLexer 文件中定义的,如下所示:

lexer grammar CommonLexerRules;

ID : [a-zAZ]+ ;
INT : [0-9]+ ;
STAR : '*';

这与 grun 配合得很好,并且测试文件的词法分析正确。但是,我认为我通过定义 * 的一些替代方案来改变它的工作方式。也就是说,我不希望 * 始终表示乘法,我还想将 MIDDOT '·' 解析为乘法。

我的问题是,生成的代码中似乎没有任何“.op”?

它看起来像这样:

  *
/ \
a b

其中 a、b 和 * 是表达式。所以我想要的是访问 * 作为某种 token ,我可以将其与 CalcParser.MUL 和 CalcParser.MIDDOT 等进行比较。

如有任何帮助,我们将不胜感激。

/杰森

最佳答案

上下文缺少 op 属性(您可能已删除)。把它放回去,你应该没问题:

expr    : expr op=( STAR | FSLASH | DIVIDE | MIDDOT ) expr     # MulDiv
// ^
// |
// +--- this one

顺便说一句,我还看到您声明了一个 ID,如下所示:

[a-zAZ]+

也许你本来打算这样做:

[a-zA-Z]+

关于ANTLR4:找不到符号操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23246008/

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