我正在使用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文件应该使用的上下文。
答案 0 :(得分:0)
实际上,这些语法是由开源社区开发和支持的,而不是由官方语言开发人员开发。
当然,有些语法可能不完整或以不同的风格书写。如果您愿意,可以自己将EOF令牌添加到Scala语法并发出拉取请求。
还可以通过编程方式将EOF令牌添加到任何规则中。