1

考虑 XML 子集的 LL(1) 语法,假设它是没有属性的 XML。我想出了这样的事情:

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

其中非终结符 NAME 是一个非空的字符字符串。这里的问题是语法不是 LL(1),因为在非终结符 PART2 的第一个产生式中存在歧义:解析“>”字符后,您无法确定“<”字符是否源自 PART2 本身(这意味着 BODY是空字符串 EPS)或来自非终结符 PART1(因此 BODY 是 BLOCKBODY 并且 '<' 是从新块获得的)。语法的其余部分没问题,显然,如果我可以使用不同的字符来表示用于打开新标签或关闭现有标签的“<”,那就可以了。坏消息是我做不到。我的问题是:我正在寻找的 LL(1) 语法是否真的存在?如果是这样,关于我需要进行哪些更改的任何想法?非常感谢。

4

0 回答 0