欢迎关注公众号《后台开发探索之旅》。
递归下降分析是语法分析里的一个常用算法,具体理论可参考编译原理相关资料。这里介绍一个用递归下降算法分析数学表达式的实例,比如计算下面表达式的值:
10*20/(5+2*5)-10+20
在python命令行里我们可以轻松执行命令:
print 10*20/(5+2*5)-10+20
得到计算结果=23,但要自己实现这个功能该怎么做呢?
这里要引入EBNF范式这个概念,EBNF是一种上下文无关文法的描述,即通过一系列数学推导描述一个语言的语法规则,其广泛使用在计算机编译领域。比如针对上面的数学表达式,我们也可以制定一个对应的EBNF语法,如下所示:
expression -> term { addop term }
addop -> "+" | "-"
term -> factor { mulop factor }
mulop -> "*" | "/"