文件结尾<eof>未在Scala语法文件中定义

时间:2017-05-19 08:35:47

标签: scala grammar antlr4

我正在使用Antlr V4和语法文件来解析整个代码。解析器,词法分析器,baselistener是使用Antlr jar从语法文件生成的。然后调用适当的上下文来扫描整个文件。 例如对于java,使用的上下文是compilationUnit;对于C ++,上下文是translationunit;对于Javascript,上下文是program等。不同语言的这些上下文关键字在它们各自的语法文件中定义,无论EOF(文件结束)是在哪里声明。

e.g。

compilationUnit :packageDeclaration? importDeclaration* typeDeclaration* EOF;

这是Java8.g4文件中的几行,其中EOF在compilationUnit下声明。因此compilationUnit是应该用于扫描整个java文件的上下文。类似的是其他语言的情况。

但是scala语言不可能进行类似的上下文查找。由于Scala.g4文件中未定义EOF。我指的是来自以下链接的scala语法文件。 https://github.com/antlr/grammars-v4/tree/master/scala

我使用的所有不同语言的语法文件都来自同一个github页面。

scala.g4文件中的这个异常导致了这个问题; scala.g4文件不完整或错误?或者我在这里遗漏了什么?

基本问题是在Antlr的帮助下扫描整个scala文件应该使用的上下文。

1 个答案:

答案 0 :(得分:0)

实际上,这些语法是由开源社区开发和支持的,而不是由官方语言开发人员开发。

当然,有些语法可能不完整或以不同的风格书写。如果您愿意,可以自己将EOF令牌添加到Scala语法并发出拉取请求。

还可以通过编程方式将EOF令牌添加到任何规则中。