Я новичок в ANTLR, поэтому, надеюсь, вы, парень, объясняете мне явно.ANTLR4 String и комментарии Lexer
У меня есть/* комментарий */(BC) лексер в ANTLR, я хочу, чтобы это было так:
/* sample */ => BC
/* s
a
m
p
l
e */ => BC
"" => STRING
" " => STRING
"a" => STRING
"hello world \1" => STRING
, но я получил это:
/* sample */
/* s
a
m
p
l
e */ => BC
""
" "
"a"
"hello world \1" => STRING
это займет только 1st/* и последний * /, то же самое с моим токеном String. Вот код Комментариев:
BC: '/*'.*'*/';
И Строка:
STRING: '"'(~('"')|(' '|'\b'|'\f'|'r'|'\n'|'\t'|'\"'|'\\'))*'"';
Благодарим Вас за решение для комментариев , Но в String, если я использую '?', Тогда все было нормально, пока я не проверил этот тестовый файл: «Он спросил меня:« Где Джон? »« ». Он вернет фразу '' Он спросил меня: \ "=> STRING'. Но я хочу получить все предложение. Это мой Лексер: 'STRING: '' '(~ (' '') | ('' | '\ b' | '\ f' | 'r' | '\ n' | '\ t' | '\" '|' \\ ')) *?' "';' Я думаю, что я включил \ "как законное содержимое в STRING, но это не работает. – Alex
Это мое требование к String из присваивания: Строковые литералы состоят из нуля или более символов, заключенных двойными кавычками ("). Используйте escape-последовательности (см. Ниже) для представления специальных символов в строке. Это ошибка времени компиляции для новой строки или символа EOF для отображения внутри строкового литерала. Все поддерживаемые escape-последовательности следующие: \ b \ f \ r \ n \ t \ "\\ – Alex