Ошибка распознавания токена antlr4 по адресу: '$'

Пытаюсь построить грамматику для языка PowerScript. Я разделил язык на несколько частей, и вроде все работает, кроме простых заголовков. Кажется, что символ $ не может быть распознан. Может ли кто-нибудь помочь мне немного? (я просто копирую небольшой пример, который пытаюсь)

grammar PowerScript;

compilationUnit :   Header EOF;

fragment 
Header  : ID '.' ID;

ID : [a-zA-Z0-9$_]+ ;

тестовый файл просто содержит:

$PBExportHeader$n_logversion.sru

Спасибо


person darioaxel    schedule 25.10.2015    source источник


Ответы (1)


Правило compilationUnit является правилом парсера. Правила парсера не могут ссылаться на фрагменты лексера. Просто удалите квалификатор fragment, чтобы сделать Header правильным правилом лексера.

Обновить

Antlr4 полностью поддерживает Unicode. Просто включите символы в стандартной кодировке Unicode:

ID : ( [a-zA-Z0-9$_] | '\uD83D\uDCB2' )+ ; // Unicode heavy Dollar sign
person GRosenberg    schedule 26.10.2015
comment
Привет! Сначала спасибо.. но нет.. Это должно быть что-то связанное с linux или UTF. Это то, что я получаю от antlrv4 после изменений: ошибка распознавания токена строки 1: 0 по адресу: «$» строка 1: 15 ошибка распознавания токена по адресу: «$» строка 1: 1 несоответствующий ввод «PBExportHeader» ожидает строку синтаксиса заголовка 1: 17 ошибка распознавания токена по адресу: '_' строка 1:28 ошибка распознавания токена по адресу: '.' - person darioaxel; 26.10.2015
comment
Какие изменения? Если предложенное, то проблема кроется в другом месте в грамматике. Опубликуйте фактическую рабочую грамматику, которая воспроизводит проблему. Если вы на самом деле не используете $ (U+0024), включите фактический символ в список символов в правиле ID. - person GRosenberg; 27.10.2015
comment
Да, кажется, проблема возникла из-за Java, пока я использую UnitTest. Я попытался сегодня скомпилировать и проверить грамматику в терминале, и она отлично работает. Спасибо, и я подписываю ответ как правильный. - person darioaxel; 28.10.2015