我正在玩树顶游戏,但我无法使用简单的语法来生成我期望的 AST。
我的规则是
1:LINE 可以由一个或多个 PIPED COMMAND 组成,用 ; 分隔 2:一个 PIPED COMMAND 是一个或多个由 | 分隔的 COMMAND 3:一个命令是一个或多个由空格分隔的标识符
我期待这样的树
hello | abc | def ; abc | test ; cats ;
生成这样的树
Line
PipedCommand
Command
Identifier hello
Command
Identifier abc
Command
Identifier def
PipedCommand
Command
Identifier abc
Command
Identifier test
PipedCommand
Command
Identifier cats
但是,即使只是正确返回管道命令,我也无法得到它,如果我指定超过 2 个,结果就会混乱
> test | abc
[Command+Command0 offset=0, "test " (identifier):
Identifier+Identifier0 offset=0, "test",
Command+Command0 offset=6, " abc" (identifier):
Identifier+Identifier0 offset=7, "abc"]
> test | abc | def
[Command+Command0 offset=0, "test " (identifier):
Identifier+Identifier0 offset=0, "test"]
>
语法目前看起来像:
grammar Line
rule commands
(command space? '|' commands space?) <Commands> / command
end
rule command
space? identifier space? <Command>
end
rule identifier
[a-zA-Z] [a-zA-Z0-9_]* <Identifier>
end
rule space
[\s]+
end
end
希望有人可以提供一点帮助!
谢谢