ANTLR找不到计数器符号

时间:2013-07-22 14:19:25

标签: java compiler-errors antlr antlr3 symbols

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

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);
                                                         ^

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

1 个答案:

答案 0 :(得分:1)

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

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);}
  ;