Parsing 这个语法(对于Lua的一小部分)是不明确的吗?
我有以下语法,是其中的一小部分: 根据,这种语法不是Parsing 这个语法(对于Lua的一小部分)是不明确的吗?,parsing,lua,compiler-construction,context-free-grammar,lr,Parsing,Lua,Compiler Construction,Context Free Grammar,Lr,我有以下语法,是其中的一小部分: 根据,这种语法不是LR(1),因此也不是LALR(1),SLR(1),LR(0)或LL(1) 这语法含糊不清吗?如果是这样,你能举一个模棱两可的句子的例子吗?如果不是,是否有充分的理由说明它不是LR(1) 编辑:一种略显简化的语法,呈现出相同的问题: stat -> exp | exp var. var -> Name | exp `[´ exp `]´. exp -> var | exp `(´ exp `)´ | `(´ exp `)´
LR(1)
,因此也不是LALR(1)
,SLR(1)
,LR(0)
或LL(1)
这语法含糊不清吗?如果是这样,你能举一个模棱两可的句子的例子吗?如果不是,是否有充分的理由说明它不是LR(1)
编辑:一种略显简化的语法,呈现出相同的问题:
stat -> exp | exp var.
var -> Name | exp `[´ exp `]´.
exp -> var | exp `(´ exp `)´ | `(´ exp `)´.
编辑2:感谢Michal Bohuslávek提供了一个关于第二个语法不明确的句子示例。不幸的是,这个句子并没有直接导致第一个语法的歧义
但是,如果将第二个语法的第一条规则更改为
stat->exp var.
,则歧义句将导致与第一个语法的歧义。Michal的想法可以扩展到生成这样一个句子:exp'('exp')“”('exp')“”['exp']”
例如,这个序列是不明确的:
exp '(' exp ')' '[' exp ']'
要么是:
exp '[' exp ']'
/ \
exp '(' exp ')'
或:
exp '[' exp ']'
/ \
exp '(' exp ')'
exp var
/ \
exp '[' exp ']'
|
'(' exp ')'