1

XML のサブセットの LL(1) 文法を考えてみましょう。それを属性のない XML とします。私はこのようなものを思いついた:

S -> BLOCK
BLOCK -> PART1 PART2
PART1 -> <NAME
PART2 -> >BODY</NAME> | />
BODY -> BLOCK BODY | EPS

非終端名は空でない文字列です。ここでの問題は、文法が LL(1) ではないことです。これは、非終端 PART2 の最初の生成内にあいまいさがあるためです。「>」文字を解析した後、「<」文字が PART2 自体から派生したものかどうかを確認できません (つまり、BODY を意味します)。は空の文字列 EPS です) または非終端の PART1 から (したがって、BODY は BLOCKBODY であり、'<' は新しいブロックから取得されます)。残りの文法は問題ありません。明らかに、新しいタグを開いたり、既存のタグを閉じたりするために使用される「<」を表現するために別の文字を使用できれば、うまくいきます。悪いニュースは、私にはそれができないということです。私の質問は、私が探している LL(1) 文法が実際に存在するかどうかです。もしそうなら、どのような変更を加える必要があるかについてのアイデアはありますか? どうもありがとう。

4

0 に答える 0