Parsing LL(1)解析冲突
我正在为一个非常简单的语法编写一个LL(1)解析器。然而,我在尝试构建解析表时发现了冲突 我很惊讶,因为语法似乎很简单。我不知道我是否对解析器或对LL(1)解析的理解有问题。也许最后语法不是LL(1) 语法是:Parsing LL(1)解析冲突,parsing,ll,Parsing,Ll,我正在为一个非常简单的语法编写一个LL(1)解析器。然而,我在尝试构建解析表时发现了冲突 我很惊讶,因为语法似乎很简单。我不知道我是否对解析器或对LL(1)解析的理解有问题。也许最后语法不是LL(1) 语法是: 1: S -> begin list 2: list -> id listPrime 3: listPrime -> id listPrime 4: | ε 我的代码遇到两个冲突,都是为了派生listPrim
1: S -> begin list
2: list -> id listPrime
3: listPrime -> id listPrime
4: | ε
我的代码遇到两个冲突,都是为了派生listPrime
,一个是终端符号id
,另一个是EOF
。在这两种情况下,规则3都与规则4相冲突
我计算的第一组
和第二组
是:
first:
{ S: Set { 'begin' },
list: Set { 'id' },
listPrime: Set { 'id', 'eps' } },
follow:
{ S: Set { 'EOF' },
list: Set { 'EOF', 'id' },
listPrime: Set { 'EOF', 'id' } } }
语法是LL(1)。您的FOLLOW set计算不正确,这很容易验证:没有任何派生在
list
或listPrime
后面跟一个令牌,而不是EOF
谢谢!在意识到FOLLOW是错误的之后,我很快就修复了bug