2015-12-04 2 views
0

Мне интересно, как совместить символ без символа новой строки в грамматике, где новая строка является терминалом в надежде на ее использование, например, файл заголовка, который может содержать знаки пунктуации чисел и т. Д.Как сопоставить символ без символа новой строки в ANTLR 4?

Грамматика Я работаю с прямо сейчас:

grammar ABCHeaderNew; 
import Configuration; 

root: header EOF; 

header: index title; 
index: 'X:' INDEX stop+; 
title: 'T:' TITLE stop+; 

INDEX: INTEGER+; 
TITLE: ANY+; 

stop: comment | NEWLINE; 
comment: '%' ANY* NEWLINE; 

INTEGER: [0-9]; 
NEWLINE: '\r'? '\n'; 
ANY: ~(NEWLINE); 

WHITESPACE: [ \t]+ -> skip; 

Это не компилируется (сообщение об ошибке: эталонная правило NEWLINE не поддерживается в наборе). Есть несколько других вариантов, которые я пытался, которые тоже не работают.

Кто-нибудь знает об обходном пути?

ответ

1

Оператор not работает только с набором, а ссылка на токен, такая как NEWLINE, не подпадает под действие.

Просто используйте нормальное множество Представительский

ANY : ~[\r\n] ; 

РИСКОВАННЫЙ: вы можете расширить определение, чтобы исключить сбежавшие конечные строки символов, в зависимости от ваших конечных потребностей конечно.

Смежные вопросы