構文表記法

ヴィルト構文記法WSN)は、メタ構文、すなわち形式言語を記述するための形式的な方法である。元々は1977年にニクラウス・ヴィルトによってバッカス・ナウア記法(BNF)の代替として提案された。WSNはBNFに比べて、明示的な反復構造を含み、空文字列を表す明示的な記号(<empty>やεなど)の使用を回避するなど、いくつかの利点がある。[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 はいくつかの概念を (異なる構文と表記法で)拡張バッカスナウア形式に組み込みました。

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 =  rule [  syntax ]  .  rule =  opt-whitespace "<"  rule-name ">"  opt-whitespace "::="  opt-whitespace expression line-end .  opt-whitespace =  {  " "  }  .  expression =  list [  "|"  expression ]  .  line-end =  opt-whitespace EOL |  line-end line-end .  list =  term [  opt-whitespace list ]  .  term =  literal |  "<"  rule-name ">"  .  literal =  """"  text """"  |  "'"  text "'"  .

この定義は複雑すぎるように見えます。なぜなら、「オプションの空白」という概念はBNFでは明示的に定義される必要があるのに対し、WSNでは暗黙的textに定義されているからです。この例でも、 は未定義のままですが、これは「ASCII-character { ASCII-character }」を意味するものと想定されています。(も未定義のままです。) が明示的に定義されていないため、この間に合わせの表現が2回使用されているEOLことに注目してください "<" rule-name ">"text

この例が示すBNFの問題の一つは、一重引用符と二重引用符の両方を に使用できるためliteral、機械可読な構文を作成しようとすると人為的なエラーが発生する可能性が高くなることです。後のメタ構文に移行した概念の一つは、ユーザーに複数の選択肢を与えると、構文で定義された文法のパーサーの作成が難しくなるという考えでした。そのため、コンピュータ言語全般において、引用符付きリテラルの定義方法がより制限されるようになりました。

構文図

構文図:

参考文献

  1. ^ Wirth, Niklaus (1977年11月). 「構文定義における表記法の不必要な多様性について何ができるだろうか?」Communications of the ACM . 20 (11): 822– 823. doi : 10.1145/359863.359883 . S2CID  35182224.
  2. ^ 「ISO 10303-21、産業オートメーションシステムと統合 - 製品データの表現と交換 - パート21:実装方法:交換構造のクリアテキストエンコーディング」国際標準化機構(ISO)2002年1月24日。 {{cite journal}}:ジャーナルを引用するには|journal=ヘルプ)が必要です[リンク切れ]
Retrieved from "https://en.wikipedia.org/w/index.php?title=Wirth_syntax_notation&oldid=1297024692"