2011-02-01 5 views
5

鉄道図は文脈自由文法を視覚化する一般的な方法であり、これらの図にBackus-Naur Formをマップすることができます。しかしsome variants of BNF、例えばW3C-BNFは例外を許可します(文脈自由な言語は相違の下で閉じられないので、これらの例外は規則的でなければなりません)。私は鉄道の図で例外を含む文法を視覚化したいと思っています。私は自分自身の拡張をグラフィカル表記法に基づいて作成するのか、それとも既にこれを実験した人がいますか?ここで例外を捕捉するための鉄道線図の拡張はありますか?

は(はい、あなたも例外なく、この特定の文法を表現することができますが、それはポイントではありません)を除いて、ルールの例です:

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

例外は任意の正規文法ことができます。 PS

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

:文法が間違っていた、それは

comment := "<!--" (string - (string "--" string | string "-")) "-->" 
する必要があります私は、矢印や線のいくつかの特殊なタイプ(ここでは感嘆符で示されている)によって非終端記号に接続された例外を追加することを考えました

否定の非直観的な使用は正式な文法ではほとんど使われない理由の1つですか?

答えて

4

最近W3C文法のためにRailroad Diagram Generatorを書くとき、私はこれを表現する方法についてしばらく考えていましたが、私が満足していた解決策を思いつくことができませんでした。続く例も見つからなかった。

従来の鉄道図では、図形に相当するのはセット差演算子だけではありません。コードポイント、範囲、補数の表記法もうまく適合しません。

最後に、モデルをグラフィカルに拡張することを控えました。私がしたのは、元の表記法で鉄道がない文法断片を保持するためのターミナルボックスを描くことでした。これをリテラルボックスと区別するために、イタリック体で設定します。ここではXML勧告からの例です:

XML comment railroad diagram

EBNFの生産だった:

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

編集

異なる形状のためにヤコブの提案に続いて、未解決のEBNF式があります今や六角形で示されている:

enter image description here

+1

興味深い。私はコードポイントと範囲に異なる形のボックスを使用したいと思います。単純な正規表現もこのようなボックスに入れることができます。ターミナルシンボル、非終端記号、パターンシンボルの3種類のボックスがあります。これらのパターンボックスに非終端記号をあなたの "Char - " - ""のように置くことは、改善できる妥協点です。どのように他のボックスの形でパターンを含むボックスを描画するのですか? – Jakob

+0

あなたは正しいです、ターミナルボックスは適切ではないので、私はそれに応じて発電機を変更しました。 – Gunther

+0

良い解決策。私はこれを「違い」ボックスに拡張しました。違いがあれば、文法をより読みやすく書くことができますが、解析するのが難しくなります。http:// imgur。com/inakK – Jakob

関連する問題