formats

语录

吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。

—- 《劝学》

学而不思则罔,思而不学则殆。

温故而知新,可以为师矣。

—- 《论语·为政第二》

学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎?

—- 《论语·学而第一》

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. (更多…)

formats

注释中的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 */ (更多…)

formats

判断两个有符号整数相加是否溢出

在Python,默认的整数是long型的,也就是机器字长,32位的最大有符号整数为0x7fffffff,64位最大有符号整数为0x7fffffffffffffff。

而在Python,支持任意大整数的运算,也就是,当我们的long型整数(在Python对象中type为int)溢出的时候,Python会自动将其变成大整数(在Python对象中type为long),也就是和Java中的BigInteger一样,支持任意位数的整数计算,不过更加方便。

我的系统是64位的,最大符号整数为0x7fffffffffffffff,我们来看看两个0x7fffffffffffffff相加会发生什么事情。 (更多…)

Tags: ,
formats

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。这个是非常地强大。 (更多…)

Tags: ,
formats

用LL(1)递归下降语法器构造一个计算器

LL(1)

何为LL(1)?通俗来说就是向前看一个词法单元的自顶向下解析器。两个L都代表left-to-right,第一个L表示解析器按“从左到右”的顺序解析输入内容;第二个L表示下降解析时也是按“从左到右”的顺序遍历子节点。而(1)表示它使用一个向前看 词法单元。

我们从一个简单的计算器来看看递归下降的语法器如何构造。

对于 2 + 3 * 5 的抽象语法树如下: (更多…)

Tags: ,
formats

构建LL(1)递归下降语法解析器

不管什么语言应用,识别语言这一步都很重要。

在小学时,大家都学习过如何分辨句子中的不同语言成分,例如动词和名词等。识别计算机语言也是如此(我们称之为语法分析)。

小例子

我们来看一下:

return x + 1;

语法图: (更多…)

Tags: ,
formats

Python文法

文法以一种简洁的形式描述着语言的语法。

以下是Python的文法,摘自Python源码目录下的Grammar/Grammar。

Python的编译器的设计:http://www.python.org/dev/peps/pep-0339/

The Zephyr Abstract Syntax Description Language.pdf

(更多…)

Tags: ,
© EverET.org