Я хочу определить простую грамматику для протокола UCI, но у меня есть некоторые проблемы с ней.
Я хочу разобрать такую строку:
id name hello world
Ничего сложного, я написал такую грамматику:
грамматика s01_uci;
id_name
: 'id' SPACE 'name' SPACE ID_NAME
;
SPACE
: ' '
;
ID_NAME
: .+?
;
LINE_END
: '\r\n'
| '\r'
| '\n'
;
Мой плагин Pycharm Antlr4 показывает, что анализируется только 'id name h', остальное не видно парсеру.Почему это происходит - неправильные правила лексера?
Выглядит просто, что я должен сопоставить токен, но, возможно, я определил слишком много токена или недостаточно в Lexer - я не представляю, как его улучшить после прочтения многих статей.
Пример анализа строк (входные данные - строки, а не файлы):
id name Stockfish 10 64 BMI2
id author T. Romstad, M. Costalba, J. Kiiski, G. Linscott
option name Debug Log File type string default
option name Contempt type spin default 24 min -100 max 100
option name Analysis Contempt type combo default Both var Off var White var Black var Both
option name Threads type spin default 1 min 1 max 512
option name Hash type spin default 16 min 1 max 131072
option name Clear Hash type button
option name Ponder type check default false
option name MultiPV type spin default 1 min 1 max 500
option name Skill Level type spin default 20 min 0 max 20
option name Move Overhead type spin default 30 min 0 max 5000
option name Minimum Thinking Time type spin default 20 min 0 max 5000
option name Slow Mover type spin default 84 min 10 max 1000
option name nodestime type spin default 0 min 0 max 10000
option name UCI_Chess960 type check default false
option name UCI_AnalyseMode type check default false
option name SyzygyPath type string default <empty>
option name SyzygyProbeDepth type spin default 1 min 1 max 100
option name Syzygy50MoveRule type check default true
option name SyzygyProbeLimit type spin default 7 min 0 max 7
uciok