Я пробую проект с использованием ANTLR4, и я слежу за этим руководство и этим вопрос.
Ниже приведен мой файл Drink.java.
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
import static org.antlr.v4.runtime.CharStreams.fromFileName;
public class Drink {
public static void main (String [] args) {
CharStream cs = fromFileName("test.txt"); //load the file
DrinkLexer lexer = new DrinkLexer(cs); //instantiate a lexer
CommonTokenStream tokens = new CommonTokenStream(lexer); //scan stream for tokens
DrinkParser parser = new DrinkParser(tokens); //parse the tokens
ParseTree tree = parser.drinkSentence(); // parse the content and get the tree
DrinkWalker listener = new DrinkWalker();
ParseTreeWalker walker = new ParseTreeWalker();
walker.walk(listener,tree);
}
}
и вот мой файл DrinkWalker.java
public class DrinkWalker extends DrinkBaseListener {
@Override public void enterEveryRule(ParserRuleContext ctx) {
System.out.println("rule entered: " + ctx.getText());//code that executes per rule
}
public void enterR(DrinkParser.RContext ctx ) {
System.out.println( "Entering R : " + ctx.ID().getText() );
}
public void exitR(DrinkParser.RContext ctx ) {
System.out.println( "Exiting R" );
}
}
Я скомпилировал их вручную и получаю следующие ошибки:
Override public void enterEveryRule(ParserRuleContext ctx) {
^
symbol: class ParserRuleContext
location: class DrinkWalker
DrinkWalker.java:5: error: cannot find symbol
public void enterR(DrinkParser.RContext ctx ) {
^
symbol: class RContext
location: class DrinkParser
DrinkWalker.java:9: error: cannot find symbol
public void exitR(DrinkParser.RContext ctx ) {
^
symbol: class RContext
location: class DrinkParser
Какие функции RContext и ParserRuleContext упомянуты выше?
Эти конкретные ошибки возникают из-за того, что вам нужно добавить файл Antlr JAR в путь к классам. Пример на домашней странице antlr.org показывает один пример. Вам придется настроить путь в зависимости от того, где установлен ваш.




Это не повторяющийся вопрос. Предыдущий упомянутый вопрос касался Java в целом. Этот вопрос касается ANTLR.