要开始做点实事了

这个寒假过得太快,一转眼,又是开学了。

本来进学生会是为了写二手书管理系统,结果到现在封面文章代码什么都干过,结果二手书还是没写好,真是有趣。开学的这段时间恰逢女生节,忙得飞起,连高数作业都没得交。收获其中之一是人生中第一次当了第一次面试官,哈哈。

阅读全文 →

C语言要考试了,你应该问问自己什么?

呐,这次我又来装逼了。我保证,这是这学期最后一次。

如果从我在百度C++吧的第一次发言(2009年7月2日)到今天,日子已经过去了2380天,然而我之前还没有考过一次C语言。好慌……好了好了,打住,不然待会儿真被当成装逼了。不过我说我初学的时候用while包住过main你信?至少你没有这样干过吧。

那么,我尽力,把自己带入2380个日子前,努力以一个初学者的视角来想一下C语言到底包含着什么知识点。我承认这种方法充满了应试色彩,而且对于上机写代码这种形式的考试可能并没有十分显著的作用。不过我是真的希望每个看到这篇文章的读者,即使以后不靠C语言吃饭,写不出优秀的C代码,也至少能对C语言有一个正确的理解。那我即使是背上装逼的骂名,也心满意足了。(其实我会告诉你我是因为不想复习物理了吗)

阅读全文 →

记一次失败的装逼经历

呐,文如标题,这次要说的是一次十分失败的装逼经历,或者说,一场惨痛的人生教训。有那么严重么?至少,对于新年的第一天和第二天的我来说,是这样的。

讲道理,在我看来,其实装逼本身就可以说是失败的。真正的强者不需要装逼,他们的强势永远都是一种自然的流露。当然,在弱者,或者说特定圈子之外的人,可能也会把这样的行为当成是装逼。就像,知乎上的很多习惯和流露的价值观,对于知乎社区的活跃用户来说,是无比正常的事情。但是对于一些微博或者贴吧上的网友而言,这些思维方式和语言习惯必是装逼无疑。

阅读全文 →

关于命令行参数的那些事

事情是这样的。这学期的C语言课程期末的大作业(说实话我不太愿意称其为“项目”……),就像我的前几篇博文里提到的,要求编写一个程序,可以读入一串字符,包含声明变量、求值、打印的功能。如何进行词法分析和构建表达式树的过程在前两篇文章我已经说过了,这里不再赘述。那么很多同学问起来的一个问题是,在作业的要求里面,有一项是“从第一个命令行参数读入文件名”——这个到底是什么意思?

有些同学把它理解成了从标准输入获取一个文件名的字符串。大错特错啦。不过也难怪,我们这个年代的人小时候接触DOS的机会不多了,可能从小到大根本就没有在计算机上敲过命令,以至于第一次写C程序的时候看到那个黑漆漆的窗口还大失所望。

阅读全文 →

构建Mao语言运行器-语法树

好了,前面我们说到了词法分析的过程。如果你按照我的思路进行的话,现在你已经可以把源代码转换成一个一个的词法单元,也就是所谓的token了。接下来要做的就是按照我们人为设定好的语法规则把这些词法单元组织起来。我们前面说过,Mao语言的语法结构极其简单,只有声明变量、表达式和print输出三个部分。而表达式所包含的内容也只包括加减乘除和括号。更关键的是它是保证输入的代码不会出错的。(当然你要满足程序对于健壮性的要求那就是另一回事了)

阅读全文 →

构建Mao语言运行器-词法分析

这个世界的本质是无序的。所以编程最广泛也是最常被讨论的用途就是处理在计算机看来什么意义也没有的字符串。而处理编程语言的源代码在其中是很特殊的一种,因为编程语言包含的信息按照一定的规则聚合,解析起来比自然语言容易得多。而处理编程语言的源代码的时候该干什么,取决于软件的目的以及这门语言本身的特性。

好了,言归正传,说说这次的期末作业Mao语言吧。一开始很多同学估计还没反应过来是怎么一回事。以为做一个解释器只要用宏替换就可以了。另外一些人估计连解释器编译器的区别都没有分清楚。讲道理的话,大一的期末项目不太可能要求学生做编译器的,那么多数据结构都没学,汇编也不懂,没法弄。

阅读全文 →

用C写内存管理真累啊

今天C语言老师布置了期末的大作业,要求实现一个毛语言。由于我进教室的时候迟到了,所以并不知道老师在此之前说了什么。不过看了一下屏幕上展示的PDF,只是要求实现最基本的变量声明和计算、输入输出的功能。不过我想着,既然做就做好点,把扩展的功能都给加上去。

阅读全文 →

Hello, world!

又把服务器的操作系统给换成了Debian,看来也不是一帆风顺,充满了坑。

阅读全文 →

用C写的一个简易JSON Parser

初来乍到的一学期实在是无聊,于是在百团大战中加了计算机协会,就认识了几个计算机和软件专业的人。看见一软件同学在空间上转发的C语言期末项目,顿时生了兴趣。代码是春节期间写完的,可惜这个博客被搁置了太久,现在把代码贴上来,也不算过分吧。

阅读全文 →