当前位置: 首页 > 知识库问答 >
问题:

ANTLR 4.5:第1行:22不匹配输入“随机”期望方向

卫英悟
2023-03-14

以下语法在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

让正在评估的生成lexer和parser结果:

行1:22不匹配的输入“随机”期望方向

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

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

删除“行”定义中的那些空间不会发生错误。为什么?

共有2个答案

宓昂雄
2023-03-14

经过几次尝试,这才是真正符合预期行为的:

row : START SPACE (RANDOM)? (SPACE)? direction Dot (LineBreak | EOF);
宰父嘉胜
2023-03-14

您输入的第一行是错误的。您没有指定您需要START随机镜头之间的空格,如下所示

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

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

line 1:19 extraneous input ' ' expecting {'randomly', DIRECTION}
line 1:28 extraneous input ' ' expecting DIRECTION
line 2:19 extraneous input ' ' expecting {'randomly', DIRECTION}
 类似资料:
  • 我已经开始使用ANTLR,并注意到它的lexer规则非常易变。一个极其令人沮丧的例子如下: 此语法不会匹配以下内容: c: \测试。txt x 奇怪的是,如果我将更改为这次它仍然失败,给出一条错误消息说“不匹配的输入'x'期待'x'”,这非常令人困惑。更奇怪的是,如果我将中的用法替换为,整个事情都可以正常工作(尽管会比我希望匹配的更多,所以一般来说,它对我来说不是一个有效的解决方案)。 我非常困惑

  • 问题内容: 作为一个初学者,当我从《权威的ANTLR 4参考》一书中学习ANTLR4时,我尝试从第7章运行修改后的练习版本: 由于Java属性只是键值对,因此我用来匹配eveything除外(我不希望它仅支持双引号中的字符串)。运行以下句子时,我得到: 当我改用它时,它可以工作。 我想知道我错在哪里,以便将来避免类似的错误。 请给我一些建议,谢谢! 问题答案: 由于ID和STRING都可以匹配以“

  • 我是ANTLR的新手。我想写一个语法来解析下面的输入: 语法如下:: 当我尝试使用语法解析上述输入时,它会引发以下异常:: 第1行:0不匹配的输入'commit a1b2c3d4',应为'commit' 我已经引用了ANTLR4:不匹配的输入链接,但仍然不清楚发生了什么。

  • 我使用请求来获取和解析使用Scrapy with Scrapyrt(实时刮取)刮取的一些数据。 我是这样做的: 根据Scrapy文档,当参数设置为时,爬行器会自动请求URL并将响应传递给解析方法,解析方法是解析请求时使用的默认方法。 start_requests 类型:布尔型 可选的 spider是否应执行Scrapy.spider.start\u请求方法。在没有ScrapyRT的情况下正常运行S

  • 我能够成功地设置parse(InputStream,DefaultHandler)方法签名的期望,但是当我试图模拟parse(InputSource,DefaultHandler)签名时,JMockit永远看不到调用,并抛出MissingInvocation异常。 下面的示例显示了两个测试用例,一个模拟InputSource风格,一个模拟InputStream风格: 运行testcase的结果是: