是否有铁路图的扩展来捕获异常?

Jak*_*kob 5 bnf context-free-grammar

铁路图是可视化无上下文语法的流行方法,您可以将Backus-Naur形式映射到这些图表.但是BNF的某些变体,例如W3C-BNF允许例外(因为无差异语言不会因差异而关闭,这些例外必须是常规的).我想在铁路图中用异常来形象化语法.我应该创建自己的图形符号扩展还是有人已经尝试过这个?

这是一个带例外规则的例子(是的,你也可以毫无例外地表达这个特殊的语法,但这不是重点):

comment := "<!--" (string - "--") "-->"
Run Code Online (Sandbox Code Playgroud)

例外可以是任何常规语法.我想通过一些特殊类型的箭头或线(这里用感叹号表示)添加连接到非终端符号的异常:

[<] ? [!] ? [-] ? [-] ? (string) ? [-] ? [-] ? [>]
                          !
                          ! ? [-] ? [-] ? ?
Run Code Online (Sandbox Code Playgroud)

PS:语法错了,应该是

comment := "<!--" (string - (string "--" string | string "-")) "-->"
Run Code Online (Sandbox Code Playgroud)

也许非直观地使用否定是其在正式语法中很少使用的一个原因?

Gun*_*her 4

最近在为 W3C 语法编写铁路图生成器时,我思考了一会儿如何表示这一点,但我无法想出一个令我满意的解决方案。也没有找到任何可以遵循的例子。

它不仅仅是集合差算子,传统铁路图中没有对应的图形。代码点、范围和补码的表示法也不太合适。

最后我没有以图形方式扩展模型。我所做的是画一个接线盒来保存原始符号中没有铁路等效项的语法片段。为了与文字框区分开来,它被设置为斜体。以下是 XML 推荐的示例:

XML注释铁路图

EBNF 产量为:

Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
Run Code Online (Sandbox Code Playgroud)

编辑

根据 Jakob 提出的不同形状的建议,未解析的 EBNF 表达式现在以六边形显示:

在此输入图像描述