ヴィルト構文記法(WSN)はメタ構文、つまり形式言語を記述する正式な方法です。 1977年にニクラウス・ヴィルトによってバッカス・ナウア記法(BNF)の代替として最初に提案されました。明示的な反復構造を含み、空の文字列(<empty>やεなど)の明示的な記号の使用を回避するなど、BNFに比べていくつかの利点があります。[1]
WSNはISO 10303-21をはじめ、いくつかの国際標準で使用されています。[2]また、 STEPのデータモデリング言語であるEXPRESSの構文を定義するためにも使用されました。
WSNはそれ自体で定義される
構文 = { PRODUCTION } .
PRODUCTION = IDENTIFIER "=" EXPRESSION "." .
EXPRESSION = TERM { "|" TERM } .
TERM = FACTOR { FACTOR } .
FACTOR = IDENTIFIER
| LITERAL
| "[" EXPRESSION "]"
| "(" EXPRESSION ")"
| "{" EXPRESSION "}" .
IDENTIFIER = letter { letter } .
LITERAL = """" character { character } """" .
等号は生成を表します。左側の要素は、右側の要素の組み合わせとして定義されます。生成は終止符 (ピリオド) で終了します。
- 繰り返しは中括弧で示されます。たとえば、 {a} はε | a | aa | aaa | ...を表します。
- オプション性は角括弧で表現されます。たとえば、 [a]b はab | bを表します。
- 括弧はグループ化に使用されます。たとえば、 (a|b)c はac | bcを表します。
これらの概念は今日では当然のこととして受け止められていますが、1977 年当時は斬新で議論を呼ぶものでした。Wirth は後に、いくつかの概念を (異なる構文と表記法で)拡張 Backus-Naur 形式に組み込みました。
letterと は未定義のままになっていることに注意してくださいcharacter。これは、定義される言語に応じて、数字文字 (数字 0 から 9) が両方の定義に含まれたり、一方から除外されたりする可能性があるためです。例:
数字= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" 。
大文字= "A" | "B" | … | "Y" | "Z" 。
小文字= "a" | "b" | … | "y" | "z" 。
文字= 大文字| 小文字。
にやその他の印刷可能なASCIIcharacter文字が含まれるようになると、 からさらに離れてしまいます。には、数字文字や特殊文字 (英数字以外) は含まれていないと考えられます。
digitletter
もう一つの例
BNF の構文は、WSN自身の BNF 例を翻訳すると次のように表すことができます。
syntax = ルール[ syntax ] .
rule = opt-whitespace "<" ルール名">" opt-whitespace "::="
opt-whitespace 式 行末.
opt-whitespace = { " " } .
expression = リスト[ "|" 式] .
line-end = opt-whitespace EOL | 行末 行末.
list = 用語[ opt-whitespace リスト] .
term = リテラル| "<" ルール名">" .
リテラル = """" テキスト"""" | "'" テキスト"'" .
この定義は複雑すぎるように見えます。なぜなら、「オプションの空白」の概念はBNF では明示的に定義される必要があるのに対し、WSN では暗黙的に定義されているからです。この例でも、textは未定義のままですが、「ASCII-character { ASCII-character }」を意味するものと想定されています。 (EOLも未定義のままです。) が明示的に定義されていないため、この間に合わせの方法が 2 回使用されていることに注意して "<" rule-name ">"くださいtext。
この例が示す BNF の問題の 1 つは、一重引用符と二重引用符の両方の文字を に使用できるようにすることでliteral、機械可読な構文を作成しようとすると人為的エラーが発生する可能性が高くなることです。後のメタ構文に移行した概念の 1 つは、ユーザーに複数の選択肢を与えると、構文で定義された文法のパーサーを作成することが難しくなるという考えでした。そのため、コンピューター言語は一般に、引用符付きリテラルの定義方法に関してより制限的になりました。
構文図
構文図:
参考文献
- ^ Wirth, Niklaus (1977年11 月)。「構文定義の表記法の不必要な多様性 について何ができるか?」Communications of the ACM。20 ( 11): 822–823。doi : 10.1145 /359863.359883。S2CID 35182224。
- ^ 「ISO 10303-21、産業オートメーションシステムと統合 - 製品データの表現と交換 - パート21:実装方法:交換構造のクリアテキストエンコーディング」。国際標準化機構。2002年1月24日。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です[リンク切れ ]
