5

鉄道図は、文脈自由文法を視覚化する一般的な方法であり、Backus-Naur Form をこれらの図にマッピングできます。しかし、 BNF の一部の変種、たとえばW3C-BNFでは例外が許可されます (文脈自由言語は違いの下で閉じられていないため、これらの例外は規則的でなければなりません)。鉄道図で例外のある文法を視覚化したいと思います。グラフィカル表記の独自の拡張機能を発明する必要がありますか、それとも誰かがすでにこれを試していますか?

例外のあるルールの例を次に示します (はい、この特定の文法を例外なく表現することもできますが、それは重要ではありません)。

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

例外は、通常の文法である可能性があります。特殊なタイプの矢印または線 (ここでは感嘆符で示されています) によって非終端記号に接続された例外を追加することを考えました。

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

PS:文法が間違っていました。

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

否定の非直感的な使用が、形式文法で否定がほとんど使用されない理由の 1 つかもしれません。

4

1 に答える 1

4

最近、W3C 文法のRailroad Diagram Generatorを作成するときに、これをどのように表現するかについてしばらく考えましたが、満足のいく解決策を思い付くことができませんでした。従うべき例も見つかりませんでした。

これは、従来の鉄道ダイヤグラムに対応するグラフィックがない集合差演算子だけではありません。コードポイント、範囲、補数の表記法もうまく適合しません。

最終的に、モデルをグラフィカルに拡張することを控えました。私がしたことは、元の表記法には鉄道に相当するものがない文法の断片を保持するための端子ボックスを描画することです。これを文字通りのボックスと区別するために、斜体で設定されています。XML 推奨事項の例を次に示します。

XML コメント鉄道図

EBNF の生産は次のとおりです。

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

編集

Jakob の別の形状の提案に従って、未解決の EBNF 式が六角形で表示されるようになりました。

ここに画像の説明を入力

于 2011-02-09T20:01:48.633 に答える