2012-02-09 14 views
5

Çok sayıda jetonla Antlr beslemenin en iyi yolu nedir? 100.000 İngilizce fiilden oluşan bir listemiz var, bunları dilbilgimize nasıl ekleyebiliriz? Biz neden verbs.g gibi büyük bir dilbilgisi dosyası içerebilir, ancak belki bir .token dosya vb değiştirerek, daha zarif bir yol var? veya fiiller:Dosyadan Antlr belirteci

grammar verbs; 

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

Ayrıca belirteçleri yerine lexer veya ayrıştırıcı belirteçleri, yani fiiller olmalıdır:? Muhtemelen VERBS:.

+0

Güncelleme: Bir dosya english_verbs.g, t özel karelerin oluşmadığı gerçeği: org.antlr.tool.GrammarSanity.traceStatesLookingForLeftRecursion (GrammarSanity.java:149) ... (tekrarlanan 10^99 kez) –

+0

Muhtemelen ne yaparsanız yapın, tanıyıcıların sınırlarını test edebilirsiniz. – dasblinkenlight

+1

Hayır, pek çok kural içeren bir lexer oluşturmanın yolu yoktur. Bir iş için, bkz: http://stackoverflow.com/questions/9008134/dynamically-create-lexer-rule –

cevap

2

Ben semantik yüklemleri kullanacağım. çözümlenen sözcük listesinde yer alıyorsa, Bunun için

bir belirteç

word : [a-z]+ 

tanımlamak zorunda ve her yerinde (yerine genel bir kelimenin) bir fiil kullanmak istiyorum denetler bir semantik yüklemi koymak fiillerin

üretilen kod her ek fiil dilbilgisi

  • her ek fiil değiştirecek

    • böyle bir görev için ayrıştırıcı/lexer kullanmamayı tavsiye eden
    • fiil çekimlerini kolay
    • üst edilir büyütür kullanma/küçük harf daha kolay işlenebilir