0

我在 EBNF 中有这个语法,用于具有算术和逻辑表达式、变量分配和打印的子语言。

start   ::= (print | assign)*
print   ::= print expr ;
assign  ::= ID = expr ;
expr    ::= andExpr (|| andExpr)*
andExpr ::= relExpr (&& relExpr)*
relExpr ::= addExpr ( == addExpr | != addExpr | <= addExpr | >= addExpr | < addExpr | > addExpr)?
addExpr ::= mulExpr (+ mulExpr | - mulExpr)*
mulExpr ::= unExpr (* hunExpri | / hunExpr)*
unExpr  ::= + unExpr | - unExpr | ! unExpr | primary
primary ::= ( expr ) | ID | NUM | true | false

不幸的是,我无法弄清楚这两个规则是什么:
unExpr ::= + unExpr
unExpr ::= - unExpr

实际上是做什么的,或者为什么我需要它们,因为我似乎能够在不应用的情况下推导出语言的每个短语他们。任何想法?
多谢 :-)

4

1 回答 1

0

如果您不打算使用以下表达式:

a=-1

(其中“a”是 ID,“1”是 NUM)在您的语言中比您不需要这两个规则。否则,您必须实施它们。

于 2013-08-18T15:17:05.843 回答