ANTLR 4.5:第1:22行不匹配输入'随机'期待DIRECTION

时间:2015-07-09 08:58:46

标签: java antlr4

以下语法无法与Antlr4.5和Java 1.8.45(IDE:IntelliJ Ultimate 14.1.4)一起使用:

grammar PlayerAIShots;
file : row row EOF ;
row : START (randomshot)? SPACE direction Dot (LineBreak | EOF);

randomshot: RANDOM ;
direction : DIRECTION ;

RANDOM : 'randomly' ;
DIRECTION : ('to the left'|'to the right'|'central') ;
START : 'The opponent shoots' ;
SPACE : ' ' ;
Dot : '.' ;

// line break
LineBreak : '\r'?'\n' | '\r';

WS : [\t\r\n]+ -> skip ; // skip tabs, newlines

让生成的词法分析器和解析器得到评估结果:

  

第1:22行不匹配输入'随机'期待DIRECTION

在使用过的数据(文本文件)中,第二行已正确处理,但如上所述错误消息不是第一行。这是使用的文本文件:

The opponent shoots randomly to the left.
The opponent shoots to the right. 

在“行”定义中删除那些SPACE不会发生错误。为什么呢?

2 个答案:

答案 0 :(得分:1)

输入的第一行是错误的。您没有指定STARTrandomshot之间的空格如此

row : START (SPACE randomshot)? SPACE direction Dot (LineBreak | EOF);

当您从“行”定义中删除“空格”时,您将获得更多错误

line 1:19 extraneous input ' ' expecting {'randomly', DIRECTION}
line 1:28 extraneous input ' ' expecting DIRECTION
line 2:19 extraneous input ' ' expecting {'randomly', DIRECTION}

答案 1 :(得分:0)

经过多次尝试,这是真正符合所期望的行为:

row : START SPACE (RANDOM)? (SPACE)? direction Dot (LineBreak | EOF);