【发布时间】:2011-07-14 17:13:01
【问题描述】:
我刚刚开始自学编译器设计的龙书。我正在研究一个问题,说要为包含二进制 +,-,*,/ 和一元 +,- 的表达式设计语法
我想出了以下方法
E -> E+T | E-T | T
T -> T*P | T/P | P
P -> +S | -S | S
S -> id | constant | (E)
但是,它有一个明显的缺陷。根据这个语法,像
这样的表达式1--3
是有效的,这是我所知道的所有编程语言中的一个错误。不过,像
这样的表达1+-+3
and
1- -3
必须有效。如何设计这样的语法?
【问题讨论】:
-
1+-+3是什么意思? -
如果
1- -3有效,为什么1--3无效?我看到的唯一原因是一元--运算符,而你没有。 -
@sepp2k - 我试图在这里模拟 C 语言的行为。 -- 是 C 中的有效标记,因此 1--3 无效
-
@Gabe - 这意味着-2。它被评估为 1
3