一起来写个简单的解释器(10)

英文出处:Ruslan’s Blog

今天,我们将继续缩小和目标之间的差距:实现一个支持全功能Pascal语言子集的解释器。

图1

在本文中,我们将更新我们的解释器来解析和解释我们第一个完整的Pascal程序。 该程序也可以由Free Pascal编译器——fpc编译。


一起来写个简单的解释器(9)

英文出处:Ruslan’s Blog

我记得很久以前在大学学习系统编程时,我相信唯一的“真正的”语言是汇编和C。而Pascal是,怎么说好呢,是那些不想知道底层发生了什么的应用程序开发人员使用的一种高级语言。

当时我不知道我将会用Python编写几乎所有的东西(并且非常喜欢它)来支付我的账单,而且基于本系列的第一篇文章里说的原因,我也会为Pascal编写解释器和编译器。

这些天,我认为自己是编程语言爱好者,我对所有的语言和他们独特的特点着迷。话虽如此,我必须指出,相比其他语言我更喜欢用某些语言多一些。我有偏见并且我将会成为第一个承认这一点的人。:)


一起来写个简单的解释器(8)

英文出处:Ruslan’s Blog

今天我们将讨论一元运算符,即一元加(+)和一元减(-)运算符。

现在很多材料都是基于上一篇文章,所以如果你需要复习一下,那么回到第七部分,再重新翻一遍。记住:重复是所有学习之母。

话虽如此,这就是今天你要做的事情:

  • 扩展语法来处理一元加号和一元减号运算符
  • 添加一个新的 UnaryOp AST节点类
  • 扩展解析器以生成带有UnaryOp节点的AST
  • 扩展解释器并添加一个新的visit_UnaryOp方法来解释一元运算符

我们开始吧!


一起来写个简单的解释器(7)

英文出处:Ruslan’s Blog

正如我上次向你承诺的那样,今天我将会谈谈我们将在整个系列的其余部分中使用的一个核心数据结构,所以系上安全,咱们出发喽!

直到现在,我们已经将我们的解释器(interpreter )和解析器(parser)代码混合在一起,只要解析器识别出像加法,减法,乘法或除法这样的特定语言结构,解释器就会求的表达式的值。 这种解释器被称为语法制导解释器(*syntax-directed interpreters*)。 他们通常对输入进行一次遍历,适用于基本的语言应用程序。 为了分析更复杂的Pascal的编程语言结构,我们需要建立一个中间表示(intermediate representation,IR)。 解析器将负责构建一个IR,而解释器将用来解释表示为IR的输入。


2017年年度计划

元旦已经过去一周了,忙着对博客改版,2017年度计划现在才出炉!

主要涉及内容:

工作 学习 生活

  • headfirst设计模式
  • 金融炼金术
  • 国富论
  • 大众天文学
  • 素描的诀窍
  • 其他


2016年度总结

2016年已经过去,这里稍微总结一下!

主要有三件大事:

  1. 研究生顺利毕业,入职农行软开
  2. 没能解决户口
  3. 外公外婆相继过世


博客改版

好久没更新过博客了,决定重新再出发,对博客进行了改变,以后多多更新。

博客原来的内容基本没删除(只所以说基本,是因为我忘了事前备份,而且直接使用的push -f把之前github上的内容全覆盖了),不管之前写的内容多糟糕,想法看法对不对,还是留着当个纪念吧!


《夜观星空》笔记

本笔记是看完书以后摘录的,由于在图书馆借的书,没做标记,可能有遗漏。

宇宙的层次

地球在太阳系中,太阳系位于银河系银心到边缘的2/3处,在猎户臂内环边上,绕银河系中心一圈约2.2亿年。

银河系属于室女座超星系团。

宇宙年龄137亿年


年俗

我家住在鲁西南地区的一个小村庄里,可能是因为离孔子老家比较近,各种过年的风俗习惯和需要遵守的规矩比较多。最近几年年轻一辈由于偷懒都不太注意遵守各种风俗习惯了,这些风俗习惯或者说规矩是迷信也好、传统也罢,可能已经不太适应这个飞速发展的社会,也可能早已忘记这些风俗背后的意义内涵,但至少是祖祖辈辈传下来的,感觉有必要记录一下。需要说明的是,家乡这边各个村庄的年俗有细微差别,比如我姥爷家,骑自行车过去只需10多分钟,但他们那过年一些细节和我家就不太一样。


我的人生目标

前段时间身体不太好,导致心情比较低落,人也颓废,啥事都不想干。找暑假实习也无心情准备,各种被拒,暑假就只能呆在实验室了。

心情不好就喜欢想杂七杂八的东西(好的时候也想),那段时间陷入了强烈的自我否定当中,感觉自己一无是处,各种缺点,而我又不是一个喜欢表达开放自己内心的人,也不习惯找人聊天排解。没事的时候(如果你心情不好任何时候都是没事的时候)就会想,自己想过什么样的生活,想有个什么样的未来。我知道自己从高考结束后一直以来都活的迷迷糊糊,没有明确的人生目标,也没想好这辈子活着是为了什么,迷茫着前进,却不知道远方到底有什么,或者说哪里才是远方。


用Scrapy写爬虫

最近懒,没怎么更新博客,赶紧在周末抽出时间写写。

前一段时间想翻翻freebuf网站的内容(黑客与画家^_^),一页一页翻太麻烦,本着黑客精神,就想着写个爬虫把网站内容题目爬下来,对感兴趣的题目可以点进去看。

先声明,原来从来没写过爬虫,于是为了偷懒,找到了Python的爬虫框架Scrapy,官方文档看这里

有框架就是快,突击学习了两天就把爬虫写出来了。


JS自动加载豆瓣相关图书内容

为了偷懒,看了两天Javascript,网上又搜索了一下jquery,想着改写下博客模板,使得罗列读的图书时可以少写些内容,能根据ID自动添加豆瓣上的其他的相关内容。PS.这是改版前的内容,用于老博客的前端页面

下面总结一下:

首先用到了豆瓣API,另外推荐百度的API Store,上面可以查找各个公司的提供的API接口。


十八岁给我一个姑娘

小说还是一口气看完比较好,虽然这本书我不是一口气看完的,但是是集中时间看的。

小说开篇就提朱裳,但从不正面描写朱裳,所有对朱裳的描写都是从“我”的印象中来的,是“我”对朱裳的感觉。所以中心还是“我”,生动细致地刻画出一个处于青春期的男孩内心里那种熊熊燃烧的感觉。


在线学习工作工具推荐

这里推荐一下协助学习工作的在线工具: StackEdit:markdown编辑器,可导入导出本地文件 百度脑图:百度的思维导图编辑工具,可存到百度网盘,很好用 processon:在线画各种图的工具,和visio功能差不多,当然和office其他工具结合肯定没这么好,能导出为png、pdf、pos文件。 在线LaTex公式编辑器:编辑公式生成LaTex、HTML等代码 公式手写识别:和上面的功能差不多,只不过这个是把公式画出来识别 再提一下在线Latex编辑器,没用过,有需要的可以看这里,暂时列这么多,其他的一些在线工具和学习工作无关没有列。

三十六大

又是陆陆续续的把《三十六大》看完了,虽然不想用这个词,但没办法。

真的不喜欢用零碎的时间看书,感觉没体系,没连贯性。

实际上还是挺享受阅读的。在周末的上午,拿本书,带上杯子,慢慢走到图书馆,接杯白开水,找一个靠窗的位置坐下,打开书本,悠悠然的看一上午,不时的喝两口水或者往窗外看看。水一定要是白开水,书一定是纸质书。


Javascript备忘

看了两天《javascript DOM编程艺术(第二版)》,这里记录一下基本的内容,备忘。

语法

var声明变量,弱类型

var age="thirty three";
age=33;

字符串中可以用双引号里面含单引号,单引号里面含双引号,不需要转义,如果单引号里面有单引号,需要转义,如下

var mood="about 5'10\" tall"

送东阳马生序

宋濂

  余幼时即嗜学。家贫,无致书以观,每假借于藏书之家,手自笔录,计日以还。天大寒,观冰坚,手指不可屈伸,弗之怠。录毕,走送了,不敢销逾约。以是人多以书假余,余因得遍观群书。既加冠,益慕圣贤之道。又患无硕师名人与游,尝趋百里外从乡之先达执经叩问。先达德隆望尊,门人弟子填其室,未尝稍降辞色。余立侍左右,援疑质理,俯身倾耳以请;或遇其叱咄,色愈恭,礼愈至,不敢出一言以复;俟其欣悦,则又请焉。故余虽愚,卒获有所闻。


沉默的大多数

图片

图有点大哈!

总算把《沉默的大多数》陆陆续续看完了,大概花了一个月吧,实际上集中时间看,一个白天就能开完了。标点都不知道怎么加了,《沉默的大多数》是一本文集,里面有一篇《沉默的大多数》,不知道该怎么用书名号了,要不要用引号?


看了艾美奖的一些感慨

不知道是什么时候喜欢上看美国的颁奖典礼的,像奥斯卡、格莱美、艾美奖、公告牌音乐大奖等等涉及电影、电视剧、音乐一类的颁奖典礼,一般看到资源都会下载下来看一下,虽然我基本不看美剧(国产剧也不怎么看)也不怎么听歌,虽然不是每一个颁奖典礼都必看,也不太执着于是否看,但大部分颁奖礼还是都看了的。


linux下java调用matlab

项目需要迁移到linux环境,准确的说是redhat系统,所以最近研究在redhat下java调用matlab的解决方法,期间遇到了各种问题,卡了好长时间,现在终于解决了。


《沉默的大多数》读后感

今天看了《沉默的大多数》里面的《沉默的大多数》,对于文学素养不够高的我来说,杂文确实不好理解,王小波也不好理解。下面主要说一下我自己的感受。怎么想起原来被逼着写读后感的日子?

首先,看了沉默的大多数,发现自己也一直属于沉默的大多数,还好,是大多数,不过虽然是大多数,但彼此是孤立的,因为沉默,所以还是少数。


java调用matlab返回值为struct类型的处理

因为项目要用java,我这初学java的人就要开始试着调用matlab导出的函数了,这里记录一些内容。

具体java调用matlab函数的过程这里不多说,具体可以看这里:Java和matlab混合编程Java调用Matlab方法的三种方式java中调用Matlab的函数+注意事项,这3篇博文涉及的问题比较全面,不过需要在实践中结合具体情况考察方案的可行性。


我对分类的一些理解

最近一直在做阿里的大数据竞赛,对数据挖掘中的分类问题有了一些自己的理解,在这里总结记录一下。

特征

分类问题中有一个很重要的概念是特征,特征代表了训练集中数据的各种属性。各种分类器模型以特征为参数进行训练,特征是分类问题中的关键。

在比赛的进行过程中,我逐渐领悟到特征才是分类问题中的核心。特征的选取要保证既能有效区别于其他类别的样本,又和所属类别的样本尽量近似或保持一致,所以特征不是越多越好,也不是越少越好,而是越能代表不同类别的差别越好。如果一个特征在所有类别的样本中是一样的数值,肯定不能使用它来分类,而一个特征在所有类别样本中无规律或者说近似随机,也不能有效的分类。特征的选取直接决定了使用算法或模型对数据进行分类的能达到的极限。


成功的花儿

成功的花儿 成功的花儿, 人们只惊羡她现时的明艳! 然而当初她的芽儿, 浸透了奋斗的泪泉, 洒遍了牺牲的血雨。