1

我有一个我认为是模棱两可的语法。我不知道如何消除歧义并将其转换为明确的语法。

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

这是对的吗?

4

0 回答 0