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