吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。 —- 《劝学》 学而不思则罔,思而不学则殆。 温故而知新,可以为师矣。 —- 《论语·为政第二》 学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎? —- 《论语·学而第一》 KISS. Keep It Simple, Stupid. —- Unkown A designer knows he has arrived at perfection not when there is no longer anything to add, but when there is no longer any thing to take away.
注释中的TODO、FIXME、XXX
第一次见到注释中的TODO是在用VS自动生成MFC框架的时候,里面自动生成的函数可能会有一句注释: // TODO Fix this function. 很久以前以为这仅仅是给人看的,原来,它也可以在VS里面开启一个TastList窗口,显示代码中所有的TODO(代办事项)。然后我们就可以方便地在TaskList中看到代码中哪些东西还需要我们完成。这个在其他的开发环境也有类似的功能。 在Python源码中,主要有三个特殊的注释:TODO、FIXME、XXX。 TODO 说明还有工作需要做,COMMENT简要地描述还有什么工作要做。 /* TODO: C speedup not implemented for sort_keys */
判断两个有符号整数相加是否溢出
在Python,默认的整数是long型的,也就是机器字长,32位的最大有符号整数为0x7fffffff,64位最大有符号整数为0x7fffffffffffffff。 而在Python,支持任意大整数的运算,也就是,当我们的long型整数(在Python对象中type为int)溢出的时候,Python会自动将其变成大整数(在Python对象中type为long),也就是和Java中的BigInteger一样,支持任意位数的整数计算,不过更加方便。 我的系统是64位的,最大符号整数为0x7fffffffffffffff,我们来看看两个0x7fffffffffffffff相加会发生什么事情。
Python使用spark模块构造计算器
Spark简介 Spark 解析器与 EBNF 语法有一些共同之处,但它将解析/处理过程分成了比传统的 EBNF 语法所允许的更小的组件。Spark 的优点在于,它对整个过程中每一步操作的控制都进行了微调,还提供了将定制代码插入到过程中的能力。 Spark的最新版是10年前发布的,真是非常的长寿,可见设计精良。其中的采用的设计模式有Reflection Pattern、Visitor Pattern、Pipes and Filters Pattern和Strategy Pattern。 初识Spark 第一次知道Spark这个模块是在IBM的网站[3]上看到的。 第一次激起我学习这个模块的兴趣是在看Python源码的时候,发现Python的编译器是用The Zephyr Abstract Syntax Description Language(Parser/Python.asdl)来定义的语法,然后通过(Parser/asdl.py、Parser/asdl_c.py、Parser/spark.py)根据Parser/Python.asdl生成C语言解析器。其中仅用了1000多行就实现了一个yacc。这个是非常地强大。
用LL(1)递归下降语法器构造一个计算器
LL(1) 何为LL(1)?通俗来说就是向前看一个词法单元的自顶向下解析器。两个L都代表left-to-right,第一个L表示解析器按“从左到右”的顺序解析输入内容;第二个L表示下降解析时也是按“从左到右”的顺序遍历子节点。而(1)表示它使用一个向前看 词法单元。 我们从一个简单的计算器来看看递归下降的语法器如何构造。 对于 2 + 3 * 5 的抽象语法树如下:
构建LL(1)递归下降语法解析器
不管什么语言应用,识别语言这一步都很重要。 在小学时,大家都学习过如何分辨句子中的不同语言成分,例如动词和名词等。识别计算机语言也是如此(我们称之为语法分析)。 小例子 我们来看一下: return x + 1; 语法图:
Python文法
文法以一种简洁的形式描述着语言的语法。 以下是Python的文法,摘自Python源码目录下的Grammar/Grammar。 Python的编译器的设计:http://www.python.org/dev/peps/pep-0339/ The Zephyr Abstract Syntax Description Language.pdf
