2013-02-08 18 views
28

V3'ten v3'e geçmeye karar verdikten sonra ANTLR 4 dilbilgisi konusunda yardıma ihtiyacım var. Hiçbir kural vardır v4 olarak

COMMENT 
    : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} 
    | '/*' (options {greedy=false;} : .)* '*/' {$channel=HIDDEN;} 
    ; 

: v3 olarak

Java tarzı yorumlar algılamak için aşağıdaki kodu kullanılır); çok bu yüzden benim sorum dilsiz ise gerçekten üzgünüm antlr deneyimli değilim -Özel seçenekler. Eylemler (gizli kanala geç) de geçersizdir.

Birisi bana ANTLR v4'te nasıl yapılacağına dair bir ipucu verebilir mi? HIDDEN kanaldaki tüm tek ve çok çizgi yorumunu koyacağız

COMMENT 
    : ('//' ~[\r\n]* '\r'? '\n' 
     | '/*' .*? '*/' 
     ) -> channel(HIDDEN) 
    ; 

:

cevap

33

v4 eşdeğer gibi görünecektir. Ancak, bu şekilde görünecektir bu HIDDEN -tokens ile bir şey yapmıyoruz, sen olabilir ayrıca skip bu belirteçleri,: ungreedy maç için lexer veya ayrıştırıcı anlatmak için

COMMENT 
    : ('//' ~[\r\n]* '\r'? '\n' 
     | '/*' .*? '*/' 
     ) -> skip 
    ; 

Not, sen don' Artık options {greedy=false;} kullanın, ancak birçok normal regex uygulamasına benzer bir ? ekleyin.

+0

Çok teşekkür ederim! – user2055330

+0

Şimdi bir hata atarak önerilen kodu (kanal kullanarak ilk varyantı) kullanıyorum: lexer kuralındaki '-> komutu' COMMENT 'tek dış en son öğe olmalıdır' Problem nedir? – user2055330

+0

@ user2055330, düzenlenmiş sürümümü dene. –