5

铁路图是一种可视化上下文无关语法的流行方法,您可以将 Backus-Naur Form 映射到这些图表。但是BNF 的一些变体,例如W3C-BNF允许异常(因为上下文无关语言不会在差异下关闭,这些异常必须是常规的)。我想在铁路图中可视化带有异常的语法。我应该发明自己的图形符号扩展还是有人已经对此进行了实验?

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

comment := "<!--" (string - "--") "-->"

异常可以是任何常规语法。我考虑过通过某种特殊类型的箭头或线条(这里用感叹号表示)添加与非终端符号连接的异常:

[<] → [!] → [-] → [-] → (string) → [-] → [-] → [>]
                          !
                          ! → [-] → [-] → ↯

PS:语法错了,应该是

comment := "<!--" (string - (string "--" string | string "-")) "-->"

也许否定的非直觉使用是它在正式语法中很少使用的原因之一?

4

1 回答 1

4

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

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

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

XML注释铁路图

EBNF 的产生是:

Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'

编辑

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

在此处输入图像描述

于 2011-02-09T20:01:48.633 回答