2013-02-14 12 views
9

Mam następujący deffinition fragmentu:antlr dowolny znak z wyjątkiem

fragment CHAR :'a'..'z'|'A'..'Z'|'\n'|'\t'|'\\'|EOF; 

teraz muszę zdefiniować regułę Lexer na sznurku. Wykonałem następujące czynności:

STRING : '"'(CHAR)*'"' 

Jednak w łańcuchu chcę dopasować wszystkie moje znaki oprócz nowego wiersza "\ n". Jakieś pomysły, jak mogę to osiągnąć?

Odpowiedz

11

Musisz także wykluczyć " oprócz linii podziału. Wypróbuj to:

STRING : '"' ~('\r' | '\n' | '"')* '"' ; 

~ neguje char-sets.

ut chcę negować tylko nową linię od mojego CHAR ustawić

żaden inny sposób niż ten AFAIK:

STRING : '"' CHAR_NO_NL* '"' ; 

fragment CHAR_NO_NL : 'a'..'z'|'A'..'Z'|'\t'|'\\'|EOF; 
+0

ok i gdzie znaki przejść w ciągu? – Andrey

+0

Przepraszam, jestem nowy w Antlr ... o to pytam: wcześniej zdefiniowałem ciąg znaków jako ciąg znaków CHAR. W twoim deffinicji STRING nie widzę, gdzie umieściłeś CHAR. W jaki sposób program będzie wiedział, że powinien zabrać wszystko z CHARS, z wyjątkiem nowej linii? – Andrey

+0

Tak, ale chcę zanegować tylko nową linię z mojego zestawu CHAR .. w twoim przypadku biorę wszystko oprócz nowej linii – Andrey

Powiązane problemy