ANTLR4和国际象棋UCI解析器问题,具有简单的语法

时间:2018-12-21 10:00:02

标签: parsing antlr grammar antlr4

我想为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

0 个答案:

没有答案