gpt4 book ai didi

java - ANTLR 找不到计数器符号

转载 作者:行者123 更新时间:2023-12-01 14:19:09 27 4
gpt4 key购买 nike

我一直在到处寻找这个问题的答案,但到目前为止我还没有找到。我正在开发一个 ANTLR 项目,该项目基本上应该实现类似 Haskell 的语法。

listDecl:
LIST {int count=0; ArrayList<Integer> list = new ArrayList<Integer>();} (WS)+ ID '=' '[' a1=atom {count++; list.add($a1.value);} (',' a2=atom {count++; list.add($a2.value);} )* ']' {listMemory.put($ID.text, list);}
;

上面的代码部分以及遵循相同基本格式的其他一些代码给了我以下错误:

TParser.java:510: error: cannot find symbol
count++; list.add(a1);
^
symbol: variable count
location: class TParser
TParser.java:510: error: cannot find symbol
count++; list.add(a1);
^
symbol: variable list
location: class TParser
TParser.java:534: error: cannot find symbol
count++; list.add(a2);
^
symbol: variable count
location: class TParser
TParser.java:534: error: cannot find symbol
count++; list.add(a2);
^
symbol: variable list
location: class TParser
TParser.java:547: error: cannot find symbol
listMemory.put((ID6!=null?ID6.getText():null), list);
^

如果之前有人问过这个问题,我很抱歉,但经过广泛的研究,我真的放弃了希望感谢您的帮助

最佳答案

如果您希望 countlist 局部变量在整个规则中可见,则需要在 @init block 中声明它们.

listDecl
@init {
int count = 0;
ArrayList<Integer> list = new ArrayList<Integer>();
}
: LIST WS+ ID '=' '[' a1=atom {count++; list.add($a1.value);}
( ',' a2=atom {count++; list.add($a2.value);}
)*
']' {listMemory.put($ID.text, list);}
;

关于java - ANTLR 找不到计数器符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789953/

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