2012-02-09 60 views
5

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

grammar verbs; 

VERBS: 
'eat' | 
'drink' | 
'sit' | 
... 
... 
| 'sleep' 
; 

也应该令牌而不是词法分析器或分析器令牌,即VERBS:或动词:?可能是VERBS :.

+0

更新:文件english_verbs.g不能被antlr使用,尽管t事实上,没有特殊字符发生: at org.antlr.tool.GrammarSanity.traceStatesLookingForLeftRecursion(GrammarSanity.java:149)...(重复10^99次) – 2012-02-09 01:48:58

+0

无论你做什么都可能会测试识别器的限制。 – dasblinkenlight 2012-02-09 01:53:48

+1

不,你不可能用许多规则创建一个词法分析器。有关解决方法,请参阅:http://stackoverflow.com/questions/9008134/dynamically-create-lexer-rule – 2012-02-10 08:05:42

回答

2

我宁愿使用语义谓词。

对于这一点,你必须定义一个令牌

word : [a-z]+ 

,并在每一个网站,你想用一个动词(而不是通用词)把语义谓词来检查,如果解析的单词在列表的动词。

使用建议不要使用语法/词法分析器用于这种任务

  • 每个附加动词将改变语法
  • 每个附加动词放大所生成的代码
  • 缀合容易
  • 上/小写可以更容易地处理