2016-04-01 79 views
1

Lexing Modlarını ilk defa deniyorum. "Ana" dilbilgisi içine alıyorum bir mod ile bir lexer dilbilgisi var. Bu hata, Grammar'ın lexerAntlr Lexers için bir Mod eklerken hata oluştu

'için java sınıflarını oluştururken hata alıyorum' ifadesi DESCRIPTION_FIELD tanınmayan bir sabit değere sahip bir lexer komutu içerir; lexer tercümanlar aşağıdaki yanlış çıktı'

Bu article Benim Lexer dilbilgisi takip eder üretebilir:

lexer grammar TestLexerGrammar; 

DESCRIPTION_FIELD 
: 
    'DESCRIPTION:'-> pushMode(FREETEXTMODE) 
; 


mode FREETEXTMODE; 

FREE_TEXT_FIELD_FORMAT 
: 
    STR+ 
; 

fragment 
STR 
: 
    (
     LETTER 
     | DIGIT 
    ) 
; 

benim ana dilbilgisi: Oluşturulan GrammarLexer.java kadar

grammar Grammar; 
import TestLexerGrammar; 


descriptionElement 
: 
    DESCRIPTION_FIELD freeTextFields 
; 

freeTextFields 
: 
    FREE_TEXT_FIELD_FORMAT+ 
; 

alıyorum bir hata: "FREETEXTMODE bir değişkene çözümlenemiyor"

Bu yanlış bir yaklaşım mı? ve bir ayrıştırma kuralı aracılığıyla değişen modu tetiklemek için olası bir yolu var mı?

+0

Eğer önerdi dilbilgisi (Mektubu ekledikten sonra, Rakam kuralları) gayet iyi. Benim için çalıştı ... – Divisadero

+0

haklısın, Üzgünüm lexer dilbilgisini ayrıştırma dilbilgisine alıyorum ve Token DESCRIPTION_FIELD kuralını (Yayını düzenleme) içine alıyorum. –

cevap