【问题标题】:How can I split a rule with Lark EBNF?如何使用 Lark EBNF 拆分规则?
【发布时间】:2021-01-24 15:53:23
【问题描述】:

我正在写一个解析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 的完整文件。随意评论/批评。想在这里学习????

【问题讨论】:

    标签: ebnf plantuml lark-parser


    【解决方案1】:

    在RTFM之后,我发现名称以下划线开头的终端没有输出到树中,所以我把它改成了:

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

    现在它可以正常工作了。

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

    【讨论】:

    • 这是一个很好的方法。您可以允许将_arrow 设置为具有类似效果的规则(而不是终端)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2021-11-26
    • 2019-02-05
    相关资源
    最近更新 更多