我对这个语法有问题:
//parser
macchinaTuring: { init();}
listaIstruzioni
{env.insertwarning();
}
;
listaIstruzioni : (istruzioni)+
;
istruzioni : (LP statoiniziale VI statofinale VI DIR RP PV (commento)? CAPO)
;
statoiniziale:s=STATE VI c=CHAR
{env.insertstatoiniziale($s, $c);}
;
statofinale: x=STATE VI y=CHAR
{env.insertstatofinale($x, $y);}
;
commento : BAR STRING
;
// lexer
LP : '(' ;
RP : ')' ;
VI : ',' ;
PV : ';' ;
DIR : ( '='
| '<'
| '>'
)
;
BAR : '//' ;
CAPO : (('\r' '\n') | ('\n') | ('\r'));
CHAR : (('a'..'z')|('A'..'Z')) ;
STATE : ('0'..'9')+ ;
STRING: (('a'..'z')|('A'..'Z')|('0'..'9')|' ')* ;
ERROR : . ;
我创建了一个测试类,用于分析输入文件,其中每一行都是istruzioni
的句子。如果缺少LP字符,程序将无法识别新行并停止读取。怎么解决?
提前致谢
答案 0 :(得分:0)
开始规则需要以明确的EOF
结束,告诉ANTLR继续读取到文件的末尾。
macchinaTuring
: { init();}
listaIstruzioni
EOF // <-- add this
{env.insertwarning();}
;