2013-08-18 2 views
0

У меня есть эта грамматика в EBNF для вспомогательного языка с арифметикой & логические выражения, назначение переменных и печать.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

на самом деле, и почему я должен нуждаться они, поскольку я, кажется, могу получить каждую фразу языка без их применения. Есть идеи?
спасибо :-)

ответ

0

Если вы планируете не такие выражения, как:

a=-1 

(где «а» является идентификатором и «1» является NUM) на вашем языке, чем вы не Мне нужны эти два правила. В противном случае вы должны их реализовать.

+0

конечно ... Я этого не предвидел. Спасибо, ты был очень полезен :-) – slovo