我正在使用 Grammar-Kit 为 DSL 提供 IntelliJ 支持。我在 bnf 文件中有一条规则,最后需要一个 EOF(文件结尾)令牌:
rule ::= ( object | (( LCURL EOL* properties EOL* RCURL ) | properties ) ) EOL* EOF
我以为我可以在 flex 文件中简单地创建一个词法分析器规则<<EOF>> { return EOF;}
,就是这样。不幸的是,在 IntelliJ 代码的更深处,处理词法分析器advance()
方法的逻辑不会完成,除非它从词法分析器中获得一个空值,导致无限循环作为结束文件返回一个非空标记。
是否有任何优雅(简单)的方法来处理语法工具包中的文件结尾,允许在解析器定义(bnf)中使用“文件结尾”?