Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 这个语法(对于Lua的一小部分)是不明确的吗?_Parsing_Lua_Compiler Construction_Context Free Grammar_Lr - Fatal编程技术网

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 ')'