写在之前
先来回顾一下ANTLR4是如何处理并分析输入流的。
语法文件
一个简单的类分析语法文件。
grammar Simple;
prog: classDef+ ; // match one or more class definitions
classDef
: 'class' ID '{' member+ '}' // a class has one or more members
{
System.out.println("class "+$ID.text);}
;
member
: 'int' ID ';' // field definition
{
System.out.println("var "+$ID.text);}
| 'int' f=ID '(' ID ')' '{' stat '}' // method definition
{
System.out.println("method: "+$f.text);}
;
stat: expr ';'
{
System.out.println("found expr: "+$ctx.getText());}
| ID '=' expr ';'
{
System.out.println("found assign: "+$ctx.getText());}
;
expr: INT
| ID '(' INT ')'
;
INT : [0-9]+ ;
ID : [a-zA-Z]+ ;
WS : [ \t\r\n]+ -> skip ;
输入流的处理分析过程
我们从常见的main程序中截取一段:
ANTLRInputStream input = new ANTLRInputStream(System