Синтаксический анализ Unicode ANTLR4 не распознается grun

#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, и он работает.