算术表达式的语法

时间:2009-03-14 10:57:46

标签: parsing grammar

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

2 个答案:

答案 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 |小量