我有这个语法,需要修改它以允许括号如:( - 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> ::= * | /
答案 0 :(得分: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> )
这对我有用。