Parsing 算术表达式语法

Parsing 算术表达式语法,parsing,grammar,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 -&g

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

优先级(从高到低)

二元算子的结合性


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

一元加号运算符似乎缺少任何内容。试试这个


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

在我们告诉您之前,您需要更多的换行符!试着格式化一下。我想他是用[S'>+TS'.-TS'.[epsilon]得到的,因为[+TS']减少到[+UT'S']-->[+U{epsilon}S']-->[+VX{epsilon}S']-->[+{epsilon}{epsilon S']>[+S'.]。这意味着一元加号与二元加号具有相同的进位,这是不正确的。我删除了左递归并进行了左因子分解,但无法为此构造解析表:(
X --> X | x | epsilon
X --> Y | x
Y --> X + X