0

我被分配了一项为算术表达式创建解析器的任务(带有括号和一元运算符)。所以我只想知道这个语法是否正确,它是否是 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

4

2 回答 2

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 ,这是左递归的。

于 2009-03-14T11:13:24.563 回答
0

一元加号运算符似乎缺少任何东西。试试这个...

V -> (W) | -W | +W | ε

于 2009-03-14T11:15:21.767 回答