0

我正在编写解析 PlantUML 状态图的语法,并且有以下疑问:

我有:

transition: STATE arrow STATE (":" event? guard? action?)? "\n"

arrow: ("->" | "-->" | "-left->" | "-right->" | "-up->" | "-down->")

但不得不改为:

transition: STATE ("->" | "-->" | "-left->" | "-right->" | "-up->" | "-down->") STATE (":" event? GUARD? action?)? "\n"

因为,对于我的应用程序,我不需要也不关心使用哪种类型的箭头;知道那里有一个箭头来形成过渡就足够了。

问题是:有没有办法transition在解析树中不出现箭头类型的情况下将规则拆分为其他更易于管理的规则?

完整文件位于https://github.com/thomedes/PlantUML-Lark-EBNF。随意评论/批评。想在这里学习

4

1 回答 1

0

在 RTFM 之后,我发现名称以下划线开头的终端没有输出到树中,所以我将其更改为:

transition: STATE _ARROW STATE (":" event? GUARD? ACTION?)? "\n"
_ARROW: "->" | "-->" | "-left->" | "-right->" | "-up->" | "-down->"

现在它工作正常。

不将此标记为已接受的答案,因为我确信有更多经验的人可以给出更好的答案。

于 2021-01-24T16:32:59.323 回答