EBNF:错过了两个生产规则的目的

时间:2013-08-18 15:03:44

标签: ebnf formal-languages

我在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

实际上,或者为什么我需要它们,因为我似乎能够在不应用它们的情况下得出语言的每个短语。有什么想法?
非常感谢: - )

1 个答案:

答案 0 :(得分:0)

如果您计划不使用以下表达式:

a=-1

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