2013-02-14 6 views
9

Ho la seguente deffinition di frammento:ANTLR corrisponde con nessun carattere eccetto

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

ora devo definire una regola lexer per la stringa. Ho fatto quanto segue:

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

Tuttavia nella stringa voglio corrispondere a tutti i miei caratteri tranne la nuova riga '\ n'. Qualche idea su come posso riuscirci?

risposta

11

È inoltre necessario escludere " oltre alle interruzioni di riga. Prova questo:

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

Il ~ nega char-set.

ut voglio negare solo la nuova linea dal mio Set di caratteri

altra via che questa per quanto ne so:

STRING : '"' CHAR_NO_NL* '"' ; 

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

ok e dove i personaggi vanno nella stringa? – Andrey

+0

Beh, scusate, sono nuovo per antlr ... quello che sto chiedendo è: ho precedentemente definito la stringa come una sequenza di CHAR. Nella tua deffinizione di STRING non riesco a vedere dove hai messo CHAR. Quindi, come il programma saprà che dovrebbe prendere tutto da CHARS tranne il carattere della nuova riga? – Andrey

+0

Sì ma voglio negare solo la nuova linea dal mio set CHAR .. nel tuo caso prendo tutto tranne la nuova riga – Andrey