Whttleを使用して文法を解析していますが、古典的なLALR のあいまいさの問題に直面しています。私の文法は次のようになります(簡略化):
<comment> ::= '{' <string> '}' # string enclosed in braces
<tag> ::= '[' <name> <quoted-string> ']' # [tagname "tag value"]
<name> ::= /[A-Za-z_]+/ # subset of all printable chars
<quoted-string> ::= '"' <string> '"' # string enclosed in quotes
<string> ::= /[:print:]/ # regex for all printable chars
もちろん、問題は<string>
. すべての印刷可能な文字が含まれているため、非常に貪欲です。<name>
これは LALR パーサーであるため、a を aとして解析しようとする<string>
と、すべてが壊れます。文法は、さまざまなものにさまざまな文字列区切り文字を使用するため、物事を複雑にします。そのため<string>
、最初にルールを作成しようとしました。
可能であれば、この文法を正規化して LALR に準拠させる標準的な方法はありますか?