ANTLR程序停止读取输入文件

时间:2014-02-14 09:59:27

标签: antlr antlr3

我对这个语法有问题:

//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字符,程序将无法识别新行并停止读取。怎么解决? 提前致谢

1 个答案:

答案 0 :(得分:0)

开始规则需要以明确的EOF结束,告诉ANTLR继续读取到文件的末尾。

macchinaTuring
: { init();}
  listaIstruzioni
  EOF // <-- add this
  {env.insertwarning();}
;