我被赋予了一个创建算术表达式解析器的任务(带括号和一元运算符)。所以我只想知道这个语法是否正确,是否为LL(1)形式,并且在构建解析表时存在实际问题
S -> TS'
S' -> +TS' | -TS' | epsilon
T -> UT'
T' -> *UT' | /UT' | epsilon
U -> VX
X -> ^U | epsilon
V -> (W) | -W | W | epsilon
W -> S | number
优先顺序(从高到低)
(), unary –
^
*, /
+, -
二元运算符的相关性
^ = right
+, -, *, / = left
答案 0 :(得分:1)
是LL(1)形式吗?
要判断语法是否为LL(1),您需要扩展生产规则。如果您可以生成任何序列的作品,导致左侧出现在右侧的第一件事,则语法不是LL(1)。
例如,请考虑以下规则:
X --> X | x | epsilon
这显然不能成为LL(1)语法的一部分,因为如果你应用最左边的作品,它就是左递归的。但是这个呢?
X --> Y | x
Y --> X + X
这也不是LL(1)语法,但它更微妙:首先你必须应用X - > Y,然后应用Y - > X + X看你现在有X - > X + X,左递归。
答案 1 :(得分:0)
你似乎错过了一元加运算符的任何东西。试试这个......
V - > (W)| -W | + W |小量