私はBNFのBNFを定義しようとしています。言い換えれば、私はBNFのメタ文法を定義しようとしています。つまり、BNF文法はそれ自身のインスタンスであり、他のBNF文法を生成することができます。BNFのBNFとは何ですか?すなわち、どのようにしてBNFメタ文法を定義するのか?
ヒント/ヒント/スニペットがあれば幸いです。
ありがとうございました!
私はBNFのBNFを定義しようとしています。言い換えれば、私はBNFのメタ文法を定義しようとしています。つまり、BNF文法はそれ自身のインスタンスであり、他のBNF文法を生成することができます。BNFのBNFとは何ですか?すなわち、どのようにしてBNFメタ文法を定義するのか?
ヒント/ヒント/スニペットがあれば幸いです。
ありがとうございました!
は、ここに1つです:
bnf = rules ;
rules = rule ;
rules = rules rule ;
rule = lefthandside EQUAL righthandside SEMICOLON ;
lefthandside = IDENTIFIER ;
righthandside = ;
righthandside = righthandside token ;
token = IDENTIFIER ;
token = QUOTEDLITERAL ;
これは葉IDENTIFIER、 下QUOTEDLITERAL、EQUALおよび未定義SEMICOLON、BNFはのlangaugeトークンの上に定義されていることを仮定。
文字の上にBNFを定義できます。ただ、追加:読者の練習として残し
EQUAL = '=' ;
SEMICOLON = ';' ;
IDENTIFIER = letter ;
IDENTIFIER = IDENTIFIER letterordigit ;
letterordigit = letter ;
letterordigit = digit ;
letter = 'A' ;
...
letter = 'Z' ;
digit = '0' ;
...
digit = '9' ;
を:選択追加(|)EBNFのためにこのBNFを作るために、複数のルール、およびクリーネ閉包を、この答えは明らかにブランクの取り扱いには苦労しますが、ブランクが許可されていればどこでも「ブランク」の非終端記号を挿入することで対応できます。基本的に文法を本質的に文字の上に書くBNF仕様システムがあり、そのような暗黙的な空白の非終端記号の挿入が行われます(例:Stratego's "Syntax Definition Formalism")。
BNF-about-BNFで思いがけないレッスンをしたい場合は、BNF処理システムの "MetaII"という正直なものから1965年までのpaper/do the tutorialを読んでください。このホワイトペーパーでは、BNFでBNFを実行する方法と、10ページすべてに2つのコンパイラを構築する方法について説明します。
(60年代から70年代のコンピュータサイエンスをすべて読んでください。それほど多くはありません。どれだけ良い素材があるかに驚くでしょう)。
<line> ::= '<' <word> '>' '::=' <definition>
<definition> ::= <word> '|' | '' <definition> | ''
あなたの質問は[BNF上のWikipediaの記事](http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form#Further_examples)で答えているようです。 –
@GregHewgill興味深い。私はFrank de RemerによってBNFがそれ自体を記述することができないと教えられました。 – EJP
@EJP:デ・レマーはパーサー・ジェネレーターや文法でかなり壮大でしたが、私は彼がそれを教えたとは思いません。私は、あなたが学んだことを間違って思い出したと思う。 –