我有一个语法,我认为这是模棱两可的。我不知道如何消除歧义并将其转换为明确的语法。
expr ::= num | lvalue | incrop expr | expr incrop | expr binop expr | (expr)
lvalue ::= $expr
incrop ::= ++ | --
binop ::= + | - |
num ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
这就是我想出的:
expr ::= num expr' | lvalue expr'| incrop expr expr' | (expr) expr'
expr' ::= incrop expr' | binop expr expr' | empty
lvalue ::= $expr
incrop ::= ++ | --
binop ::= + | - |
num ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
对吗?