如何让计算机计算四则运算表达式[第一篇]

      从今天开始,我要发表些一系列文章。讨论关于如何编程实现加减乘除四则运算的解析和计算。我现在所掌握的一共有三种方法。

      第一种方法称为递归下降。通过调用一些相互递归的函数来解析表达式。不需要任何前提知识。

      第二种方法首先建立抽象语法树,然后再遍历语法树,把中缀表达式变成后缀表达式,然后再计算。需要一点编译原理的知识。

      第三种方法首先建立抽象语法树,然后直接遍历语法树计算出结果。需要更多的编译原理知识。

      这篇文章讨论第一种方法。这种方法经常出现在编程语言和数据结构的教科书书中,来展现递归的神奇作用。首先,一个表达式由一些通过加和减运算的项组成。项再由一些通过乘和除法运算的因子组成。然后因子可以由数字组成。下来的问题是如何识别表达式,项,因子和数字。可以为表达式定义一个expression()方法来解析,为项定义一个term()方法来解析,为因子定义一个factor()方法来解析,数字直接根据输入的符号来解析。最顶层的expression()方法不断地调用term()来解析项,term()方法再不断地调用factor()来解析因子,在factor()方法中不断地根据输入符号来解析数字。

      所以递归下降的方法就是通过对表达式不断地细分,求值再通过计算把结果进行结合。

      expression()方法可以由下面的图所描述:

很容易转换为代码:

      term()可以由下面的图所描述:

转换为代码:

      factor()可以由下面的图所描述:

转换为代码:

完成了!下面是完整的java源代码:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值