美文网首页程序员
简单四则运算解释器

简单四则运算解释器

作者: 王强儿 | 来源:发表于2016-04-19 21:16 被阅读664次

简单四则运算解释器

很多面试喜欢考

这是一个很有意思的东西吧

代码查看

代码链接

主要参考资料

let us build a simple interpreter

  如果你仔细阅读了这几篇文章,自己就完全可以写出来。文章写的比较详细,用Python写出来的,你必须翻译成自己喜欢的语言,或者去学一门语言,重写最经典的代码。

  我翻译成Java的版本了,增加了生成前缀表达式,逆波兰法的代码生成。

   我推荐的这篇文章是要写一个完整的解释器的,但是无奈更新比较慢,开始时一月一次更新,最近好长时间都没有更新了。只能去啃书,但是看书很累的。

  用一门语言去解析另外一种语言,可以更好的理解几种基本的程序构造方法。

  学校学习的时候运算符的意义一直在变化,运算的对象也在变化,代数学教会了我们做计算,可惜那时我还不太能思考。

   其实解析四则运算很无聊的呀,结果是什么你基本已经知道了。如果你想看点激动人心的东西,那么你也许会对json和xml感兴趣。

看看下面的文章或许有所帮助

简单json解析

XML解析想到的

  四则运算解析的难点是求值顺序的问题,因为这里面有乘除,有括号可以提高运算优先级。最容易翻译成代码的就是抽象的定义,1.表达式:非终结符[(+|-)非终结符]  2.非终结符: 终结符[(*|/)终结符] 3.终结符: [+|_]数字 |(表达式)。我这里使用的语言是不标准的。

   当是这个定义,对于正常人很难以理解,为什么要这个样子?1+(-1)-2*3这样的表达式就可以先计算正负号,再计算括号内,再乘除,再加减,这样的运算才能得到我们想要的结构。这个无疑是很复杂的过程,但是我们小学的时候就可以在我们的脑子里完成这种操作,而且很容易就可以辨识出结构。

 让计算机明白这样的结构需要付出的代价就是人真正理解这种表达的意义。我们硬生生造了一些高级的词汇,然后要去研究他。其实如果,我们的表达式非常长(1+4*2+3-4(444+55-1------1-+++++1*4/1)),嵌套很深,人照样会糊涂,计算机却可以容易算出来。所以数学课上没人会写出这样复杂的表达式,但是程序里面就有这样负责的,看来我们是打算把某些人搞糊涂。

  我见过用正则表达式匹配运算符号,先计算出高优先级的子结构式,那也许是人直观思考的结果。两种方法都可以实现所要达到的目标。这代表了两种思维,直观的人的思维和机器的思维,感性和理性。

后续希望继续改进,做成简单的语言解析器,期待出新篇章。

 

相关文章

  • 简单四则运算解释器

    图片发自简书App 很多面试喜欢考 这是一个很有意思的东西吧 代码查看 代码链接 主要参考资料 let us bu...

  • 图解Java设计模式之解释器模式

    @TOC 四则运算问题 通过解释器模式来实现四则运算,如计算 a + b + c 的值,具体要求1)先输入表达式的...

  • 简单版解释器

  • java设计模式15(解释器模式)

    解释器模式用于描述如何构成一个简单的语言解释器,主要应用于使用面向对象语言开发的解释器的设计。 解释器模式的定义:...

  • IPython解释器

    python交互解释器 在终端直接输入 python安装IPython解释器很简单,在终端输入: 退出IPytho...

  • 72 - 解释器模式详解

    解释器模式,它用来描述如何构建一个简单的“语言”解释器。比起命令模式,解释器模式更加小众,在一些特定的领域会被用到...

  • python基本知识

    python解释型语言的执行方式 源代码------解释器-------输出 python优点:简单、易学...

  • 2019-03-03——设计模式 解释器模式

    特点 解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发的编译器中。它描述了如何为简单的...

  • 用四则运算解析微服务

    Spring cloud架构解决四则运算 加、减、乘、除是最简单的四则运算,也是可以作为分布式计算的最简单的示例,...

  • @修饰符

    话不多说先上代码,简单粗暴解释用法 执行以上代码,得到输出 这里解释了@解释器的用法,即将函数作为修饰器函数的参数...

网友评论

    本文标题:简单四则运算解释器

    本文链接:https://www.haomeiwen.com/subject/iwaolttx.html