铁路图是一种可视化无上下文语法的流行方法,您可以将Backus-Naur形式映射到这些图表。但是some variants of BNF,例如W3C-BNF允许例外(因为无差异语言不会因差异而关闭,因此这些例外必须是常规的)。我想在铁路图中用异常来形象化语法。我应该为图形表示法创建自己的扩展还是已经有人尝试过这个?
以下是一个带例外规则的例子(是的,你也可以毫无例外地表达这个特殊的语法,但这不是重点):
comment := "<!--" (string - "--") "-->"
异常可以是任何常规语法。我想通过一些特殊类型的箭头或线(这里用感叹号表示)添加连接到非终端符号的异常:
[<] → [!] → [-] → [-] → (string) → [-] → [-] → [>]
!
! → [-] → [-] → ↯
P.S:语法错了,应该是
comment := "<!--" (string - (string "--" string | string "-")) "-->"
也许非直觉地使用否定是其在正式语法中很少使用的一个原因?
答案 0 :(得分:4)
最近为W3C语法编写Railroad Diagram Generator时,我想了一下如何表示这一点,但我无法想出一个我满意的解决方案。没有找到任何可以遵循的例子。
不仅是设定差分算子,在传统的铁路图中没有图形等效。代码点,范围和补充的表示法也不合适。
最后,我没有以图形方式扩展模型。我所做的是画一个终端盒来保存原始表示法中没有铁路等价物的语法片段。为了区别于文字框,它以斜体显示。以下是XML建议的一个示例:
EBNF的生产是:
Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
修改强>:
根据雅各布关于不同形状的提议,未解决的EBNF表达式现在以六边形显示: