我正在为布尔计算器语言编写语法。用这种语言编写的程序将包含至少一个语句,其结果将是布尔值。
下面给出了这种语言的示例陈述:
( A + B >= C ) AND ( D == 4 )
我到目前为止提出的语法如下:
E => T COP T | EXPR BOP EXPR
T => VAR | EXPR
VAR => A | B | C | D
EXPR => AEXPR | CEXPR
AEXPR => "(" VAR AOP VAR ")"
CEXPR => VAR COP AEXPR | AEXPR COP AEXPR
AOP => + | - | * | / | %
BOP => AND | OR
COP => == | != | < | > | <= | >=
这里要考虑的主要事情是,在二进制操作BOP
中不能连接两个VAR,并且语句必须返回一个布尔值。
我想知道上面的语法是否符合这个标准,还是我错过了什么?
任何帮助都会得到赞赏。
由于
答案 0 :(得分:1)
这里要考虑的主要事情是,在二进制操作BOP中不能连接两个VAR,并且该语句必须返回一个布尔值。
上述要求在以下情况下失败:
E = EXPR BOP EXPR
EXPR = AEXPR
=> E = AEXPR BOP AEXPR
我假设(VAR AOP VAR)
产生VAR
。
下面给出了所需语法的更标准化形式:
E = T COP T | EXPR BOP EXPR;
T = VAR | AEXPR;
VAR = "A" | "B" | "C" | "D";
AEXPR = "(" VAR AOP VAR ")" | "(" VAR AOP AEXPR ")";
EXPR = VAR COP AEXPR | AEXPR COP AEXPR;
AOP = "+" | "-" | "*" | "/" | "%";
BOP = "AND" | "OR";
COP = "==" | "!=" | "<" | ">" | "<=" | ">=";