来自文件的Antlr令牌

Tea*_*ous 5 antlr

为Antlr提供大量令牌的最佳方法是什么?假设我们有一个包含100,000个英语动词的列表,我们怎样才能将它们添加到我们的语法中?我们可能会包含一个像verbs.g这样的巨大语法文件,但也许有更优雅的方式,通过修改.token文件等?

grammar verbs;

VERBS:
'eat' |
'drink' |
'sit' |
...
...
| 'sleep'
;
Run Code Online (Sandbox Code Playgroud)

此外,令牌还应该是词法分析器或解析器令牌,即VERBS:或动词:?可能是VERBS:

Cor*_*onA 2

我宁愿使用语义谓词。

为此,您必须定义一个令牌

word : [a-z]+
Run Code Online (Sandbox Code Playgroud)

并且在您想要使用动词(而不是通用单词)的每个站点上放置一个语义谓词来检查已解析的单词是否在动词列表中。

使用建议不要使用解析器/词法分析器来执行此类任务

  • 每个额外的动词都会改变语法
  • 每个附加动词都会扩大生成的代码
  • 共轭更容易
  • 大写/小写可以更容易处理