Я пытаюсь создать таблицу символов для языка, использующего Antlr4.В моем файле грамматики есть следующее правило:
/* Global String Declaration */
//string_decl : STRING id ASSIGN str SEMICOLON ;
string_decl returns [StrEntry s] : STRING id ASSIGN ex=str SEMICOLON
{ $s = new StrEntry(); s.addID($id.text); s.addValue($ex.text);} ;
Я также создал класс StrEntry (фиктивная реализация)
public class StrEntry{
String value;
String id;
String type;
void addID(String x){
id = x;
}
void addValue(String c){
value = c;
}
}
Когда я компилирую (javac *.java
), я получаюследующая ошибка:
MicroParser.java:382: error: cannot find symbol
((String_declContext)_localctx).s = new StrEntry(); s.addID((((String_declContext)_localctx).id!=null? _input.getText(((String_declContext)_localctx).id.start, ((String_declContext)_localctx).id.stop):null)); s.addValue((((String_declContext)_localctx).ex!=null?_input.getText(((String_declContext)_localctx).ex.start, ((String_declContext)_localctx).ex.stop):null));
^
symbol: variable s
location: class MicroParser
Он говорит, что переменная s типа StrEntry отсутствует, но я определил ее в своем файле грамматики.Я не думаю, что редактирование его в файле MicroParser.java является хорошей идеей, так как оно было сгенерировано Antlr4.
Что мне делать?