首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ANTLR 4中什么时候需要EOF?

在ANTLR 4中什么时候需要EOF?
EN

Stack Overflow用户
提问于 2013-07-24 20:31:10
回答 1查看 18.4K关注 0票数 19

TestDriver in ANTLRWorks2看上去有点挑剔,它什么时候会接受没有和显式的EOF语法,什么时候不接受。ANTLR4入门指南中的Hello语法在任何地方都不使用EOF,因此我推断,如果可能的话,最好避免显式EOF

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-25 00:33:48

当您试图解析整个输入文件时,应该在条目规则的末尾包含一个显式的EOF。如果不包含EOF,这意味着您没有尝试解析整个输入,如果只解析部分输入意味着避免语法错误,则可以接受。

例如,考虑以下规则:

代码语言:javascript
复制
file : item*;

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

如果相反,我有以下规则:

代码语言:javascript
复制
file : item* EOF;

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

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

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

不幸的是,这种更改对性能的影响是巨大的,因此在解决这个问题之前,会出现一些不像您所期望的那样的边缘情况。

票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17844248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档