ANTLR "Arithmeic" Grammar Java Test


How to write a Java program to test the lexer and parser generated from ANTLR?

✍: FYIcenter


If you have the lexer and parser generated from the arithmetic.g4 grammar file by ANTLR as shown in the previous tutorial, you use the following Java program to test it:

// Copyright (c)
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;

public class arithmeticTest {
   public static void main(String [] args) throws Exception {
      String source = args[0];
      CharStream stream = CharStreams.fromString(source);
      arithmeticLexer lexer = new arithmeticLexer(stream);
      CommonTokenStream tokens = new CommonTokenStream(lexer);
      arithmeticParser parser = new arithmeticParser(tokens);
      ParseTree tree = parser.equation();
      // ParseTree tree = parser.expression(); 

Note that the above program tests the "equation" grammar rule. You un-comment the expression() line to test the "expression grammar rule.

Make sure the are compiled in the current directory as shown in the previous tutorial. Then compile and run

\fyicenter>javac -cp .;antlr-4.7.1-complete.jar

\fyicenter>java -cp .;antlr-4.7.1-complete.jar arithmeticTest "x=a"

(equation (expression (term (factor (signedAtom (atom (variable x)))))) (relop =
) (expression (term (factor (signedAtom (atom (variable a)))))))

\fyicenter>java -cp .;antlr-4.7.1-complete.jar arithmeticTest  \
   "x  = (-b + (b^2 -4*a*c)^0.50) / 4*a*c"

(equation (expression (term (factor (signedAtom (atom (variable x)))))) (relop =
) (expression (term (factor (signedAtom (atom ( (expression (term (factor (
signedAtom - (signedAtom (atom (variable b)))))) + (term (factor (signedAtom (atom (
(expression (term (factor (signedAtom (atom (variable b))) ^ (signedAtom (atom (
scientific 2))))) - (term (factor (signedAtom (atom (scientific 4)))) * (factor
(signedAtom (atom (variable a)))) * (factor (signedAtom (atom (variable c))))))
))) ^ (signedAtom (atom (scientific 0.50)))))) )))) / (factor (signedAtom (atom
(scientific 4)))) * (factor (signedAtom (atom (variable a)))) * (factor (
signedAtom (atom (variable c)))))))

If the source code has any syntax error, ANTLR will print out errors:

\fyicenter>java -cp .;antlr-4.7.1-complete.jar arithmeticTest "x  = (a+b"

line 1:9 missing ')' at '<EOF>'
(equation (expression (term (factor (signedAtom (atom (variable x)))))) (relop =
) (expression (term (factor (signedAtom (atom ( (expression (term (factor (
signedAtom (atom (variable a))))) + (term (factor (signedAtom (atom (variable b))))))
 <missing ')'>))))))


FAQ for ANTLR Parser Generator

ANTLR Parser Java API

ANTLR Commands and Examples

⇑⇑ FAQ for ANTLR Parser Generator

2020-12-26, 6458👍, 0💬