四则运算的 BNF 产生式
1 2 3 4 5 6 7 8 9 10
| <expression> ::= <term> | <expression> "+" <term> | <expression> "-" <term>
<term> ::= <factor> | <term> "*" <factor> | <term> "/" <factor>
<factor> ::= <number> | "(" <expression> ")"
|
这两句描述决定了四则运算的计算顺序是乘除优先,加减次之,因为遇到+/-运算符后会分割左右两侧作为表达式递归解析,相应的,"(" <expression> ")" 也就决定了括号的运算符最高,因为在遇到括号时会将括号内的表达式单独作为一个factor解析
可以知道,处于bnf树级结构的最低端的表达式,优先级就越高
1 2
| <expression> "+" <term> <expression> "-" <term>
|
例子:3 + 5 * (10 - 6 / 2)
过程:
1 2 3 4 5 6 7 8
| expression → expression "+" term → 3 + term → 3 + (term "*" factor) → 3 + (5 * factor) → 3 + (5 * ( "(" expression ")" )) → 3 + (5 * (10 - term)) → 3 + (5 * (10 - (term "/" factor))) → 3 + (5 * (10 - (6 / 2)))
|