2012-02-09 61 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]+ 

,並在每一個網站,你想用一個動詞(而不是通用詞)把語義謂詞來檢查,如果解析的單詞在列表的動詞。

使用建議不要使用語法/詞法分析器用於這種任務

  • 每個附加動詞將改變語法
  • 每個附加動詞放大所生成的代碼
  • 綴合容易
  • 上/小寫可以更容易地處理