Parsing 算术表达式语法
我被分配了一项任务,为算术表达式(带括号和一元运算符)创建解析器。所以我只想知道这个语法是否正确,它是LL(1)形式的,并且在构造这个语法的解析表时遇到了实际问题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
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