JavaCUP仕様を作成する必要があり、EBNF文法が与えられました。しかし、私は2つの間で変換する方法がわかりません。基本的な考え方は聞いたことがありますが、何を変える必要があるのか、「ターミナル」とは何かなど、よくわかりません。
誰かが別のものに変換する方法を説明できますか、または私がそれについて読むことができる場所があるかどうか?
JavaCUP仕様を作成する必要があり、EBNF文法が与えられました。しかし、私は2つの間で変換する方法がわかりません。基本的な考え方は聞いたことがありますが、何を変える必要があるのか、「ターミナル」とは何かなど、よくわかりません。
誰かが別のものに変換する方法を説明できますか、または私がそれについて読むことができる場所があるかどうか?
EBNF文法は、通常のBNFに似ていますが、構文糖衣としていくつかの追加機能(正規表現演算子に似ています)があります。文法を示さなかったので、通常のBNFに変換するために脱糖する必要がある部分を推測することしかできませんが、最も一般的なものは次のとおりです(JavaCUPなどのLALRジェネレーターの場合)。
B* becomes Bstar, defined as Bstar ::= epsilon; Bstar ::= Bstar B
B+ becomes Bplus, defined as Bplus ::= B; Bplus ::= Bplus B
B? becomes Bquestion, defined as Bquestion ::= epsilon; Bquestion ::= B
B | C becomes BorC, defined as BorC ::= B; BorC ::= C
ただし、ここでのepsilon
識別子はパーサジェネレータが空の文字列を示しています。