2016-03-30 24 views
1

STRING adlı kullanıcının kullanıcıdan beklediği bir kural var. Şu anda kullanıcı, dilbilgisi içinde tanımladığım bir anahtar kelime sunduğunda, ayrıştırıcı bir segmentasyon hatası veriyor. exANTLR 2 Anahtar sözcükleri çözme sorunu

:

sampleClause: calc! strName {##->setType(SAMPLE_CLAUSE);}; 
strName : STRING; 
calc: "CALC" | "calc"; 

kullanıcı strName olarak kalk/CALC girerse, çözümleyici Seg Arıza atar. Bundan nasıl kurtulacağımı bilmiyorum.

DÜZENLEME: Ayrıştırıcıdan bir bölümleme hatası vererek nasıl kaçınıldığını bilmek istiyorum. Bu, istemediğim uygulamayı çöker. Bu durumlarda seg hata yerine incelikle çıkmak istiyorum.

P.S: Bir bağımlılık olduğu için, ANTLR 2'deki çözüme ihtiyacım var.

cevap

0

burada olağan çözüm anahtar kelime bir grup var varsayarsak tüm anahtar kelimeleri

strName : STRING | calc ; 

Askew için strName değiştirmektir, kodun bir lexer olarak bunların her tanımlayabilir ve bir keywords kural oluşturmak istiyoruz.

calc: CALC; 
CALC: "Calc" | "calc"; 
FOO: "foo"; 
BAR: "bar"; 

keywords: CALC| FOO | BAR; 

strName: STRING | keywords; 

Muhtemelen de zaman keywords maçlar dizeye belirteç türünü değiştirmek istiyorum. Bunu ANTLR 2'de nasıl yapacağımı unutuyorum, ancak oldukça basittir.