Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I use ANTLR's generated parser and lexer? [closed]

Tags:

java

antlr

I created the antlr4 grammar file Jay.g4 and generated the JayLexer.java and JayParser.java. I compiled these to create JayLexer.class and JayParser.class.

My question is: how do I use those generated sources with Java? I am using the NetBeans IDE and I don't know how to integrate the lexer and parser into my project and make them work correctly.

like image 249
Setrakus Avatar asked Sep 20 '25 09:09

Setrakus


1 Answers

If you're going to venture further, I recommend The Definitive Antlr 4 Reference. From the Antlr documentation, you can download/see some sample code, including this:

final LexerGrammar lg = (LexerGrammar) Grammar.load(lexerGrammarFileName);
final Grammar pg = Grammar.load(parserGrammarFileName, lg);
ANTLRFileStream input = new ANTLRFileStream(fileNameToParse);
LexerInterpreter lexEngine = lg.createLexerInterpreter(input);
CommonTokenStream tokens = new CommonTokenStream(lexEngine);
ParserInterpreter parser = pg.createParserInterpreter(tokens);
ParseTree t = parser.parse(pg.getRule(startRule).index);
System.out.println("parse tree: " + t.toStringTree(parser));

If you have the classes JayLexer and JayParser, however, you'd rather write something like:

ANTLRFileStream input = new ANTLRFileStream(fileName); // a character stream
JayLexer lex = new JayLexer(input); // transforms characters into tokens
CommonTokenStream tokens = new CommonTokenStream(lex); // a token stream
JayParser parser = new JayParser(tokens); // transforms tokens into parse trees
ParseTree t = parser.your_first_rule_name(); // creates the parse tree from the called rule

Then use the parse tree as you wish, for example a class implementing the JayBaseListener or JayBaseVisitor. Check one of the given links for more information.

like image 105
Mephy Avatar answered Sep 22 '25 22:09

Mephy