#antlr #antlr4
#antlr #antlr4
Вопрос:
Учитывая следующее:
grammar Lang
start: CHAR;
CHAR: [uE001];
WS: [ trn] -> skip;
При запуске этого пакетного файла:
@echo off
setlocal
call antlr4 -o .javatarget LangFile.g4 -encoding UTF-8
cd .javatarget
call javac LangFile*.java
call grun LangFile Lang -gui -diagnostics -trace -encoding UTF-8
endlocal
@echo on
Эта ошибка возникает, когда я вставляю символ Юникода:
^Z
line 1:0 token recognition error at: '?'
enter Lang, LT(1)=<EOF>
consume [@0,3:2='<EOF>',<-1>,2:0] rule Lang
exit Lang, LT(1)=<EOF>
Несмотря на мой поиск в других ответах (таких как опция -encoding ), я, похоже, не могу заставить работать такой синтаксический анализ Unicode (области частного использования).
Редактировать: у меня версия 4.8.
Похоже, проблема связана с инструментом grun. Запуск его вручную с помощью Python выполняется нормально, как и указание входного файла. Но прямая вставка содержимого в консоль завершается неудачей. Для меня достаточно вернуться к использованию входного файла, но, возможно, на этот вопрос можно ответить, когда работает режим прямого ввода grun.
Ответ №1:
Может быть проблема с тем, как ваш grun
скрипт обрабатывает ввод, потому что, когда я создаю лексер и синтаксический анализатор и запускаю это:
LangLexer lexer = new LangLexer(CharStreams.fromString("uE001"));
LangParser parser = new LangParser(new CommonTokenStream(lexer));
parser.start();
он анализирует без каких-либо предупреждений или ошибок.
Комментарии:
1. Может быть, это могут быть другие пакетные файлы? antlr4.bat :
java org.antlr.v4.Tool %*
, grun.bat :java org.antlr.v4.gui.TestRig %*
2. Похоже, это проблема с пакетными инструментами, я запустил анализатор на Python, и он работает.