繁体   English   中英

算术表达式语法

[英]Grammar for Arithmetic Expressions

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

它是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 | ε

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM