gpt4 book ai didi

antlr - ANTLR 4 中何时需要 EOF?

转载 作者:行者123 更新时间:2023-12-03 01:23:17 24 4
gpt4 key购买 nike

ANTLRWorks2 中的 TestDriver 似乎对何时接受不带明确 EOF 的语法以及何时不接受有些挑剔。 ANTLR4 Getting Started Guide 中的 Hello 语法不在任何地方使用 EOF,因此我推断最好尽可能避免显式 EOF

使用EOF的最佳实践是什么?你什么时候真正需要它?

最佳答案

每当您尝试解析整个输入文件时,都应该在输入规则末尾包含显式的 EOF。如果不包含 EOF,则意味着您不会尝试解析整个输入,并且如果可以避免语法错误,则可以只解析部分输入。

例如,考虑以下规则:

file : item*;

这条规则的意思是“解析尽可能多的 item 元素,然后停止。”换句话说,此规则将永远尝试从语法错误中恢复,因为它总是假设语法错误是超出了范围的某些语法构造的一部分。 文件规则。语法错误甚至不会被报告,因为解析器将直接停止。

如果我有以下规则:

file : item* EOF;

In 表示“文件完全由零个或多个 item 元素的序列组成。”如果在解析 item 元素时遇到语法错误,此规则尝试从语法错误中恢复(并报告)并继续,因为 EOF 是必需的,但尚未达到。

<小时/>

对于仅尝试解析部分输入的规则,ANTLR 4 通常有效,但并非总是如此。以下问题描述了一个技术问题,如果省略 EOF,ANTLR 4 并不总是做出正确的决定。

https://github.com/antlr/antlr4/issues/118

不幸的是,此更改对性能的影响很大,因此在解决此问题之前,会出现一些边缘情况,其行为不会按您的预期进行。

关于antlr - ANTLR 4 中何时需要 EOF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17844248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com