2010-09-15 111 views
4

我有這個語法,需要修改它以允許括號:(-1)和 - (1 * 5)可能爲1+(2 * 5)以及一元減號。帶括號的語法

有沒有人有如何做的建議?

<expr> ::= <term> | <expr> <op1> <term> 
<term> ::= <darg> |<term> <op2> <darg> 
<darg> ::= <digit> | <darg> <digit>  
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 
<op1> ::= + | - 
<op2> ::= * |/

看起來這將是這樣的:

<expr> ::= <term> | <expr> <op1> <term> 
<term> ::= <unary> |<term> <op2> <unary> 
<unary> ::= <darg> | -<darg> | -<unary><darg> 
<darg> ::= <digit> | <darg> <digit> | <paren> 
<paren> ::= (<expr>) 
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 
<op1> ::= + | - 
<op2> ::= * |/

回答

4

試試這個:

<expr> ::= <term> | <term> <op1> <expr> 
<term> ::= <unary> | <term> <op2> <unary> 
<unary> ::= <value> | <op1> <value> 
<darg> ::= <digit> | <darg> <digit> 
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 
<op1> ::= + | - 
<op2> ::= * |/
<value>  ::= <darg> | (<expr>) 

這爲我工作。