Compiler
叶玄青
我是谁
展开
-
编译器设计:词法分析
通过python实现了一个能够识别单词的程序,单词定义为 以字母开头的任意数字和字母的组合1. re模块定义字母和数字pattern,通过match对字符进行匹配2. enum模块用来定义识别单词过程中的状态,这里定义了 初始态 过程态 完成态 错误态 开始识别单词 已经识别单词的一部分 识别到一个单词 出错代码如下,整个模块通过对字符串line进行分析,所以lin原创 2016-11-29 09:31:26 · 3501 阅读 · 0 评论 -
python解释器实现及其嵌入式应用:Let's Build a Simple Interpreter(part12)
英文原文 不要担心走得缓慢;害怕原地不动! - 中国谚语(我表示怀疑!!!)大家好,欢迎回来!今天我们将要走几小步来学习如何识别Pascal过程声明。什么是过程声明?一个过程声明是一个语言结构,它定义了一个标记符,以及一个关联的Pascal代码块。在我们深入讨论之前,说几句关于Pascal过程以及他们的声明:Pascal过程没有返回语句,在到达程序块末尾的时候退出。Pascal过程可以相互翻译 2017-02-20 23:04:07 · 1026 阅读 · 0 评论 -
python解释器实现及其嵌入式应用:抽象语法树
英文原文地址第七部分开始引入了抽象语法树,开始考虑到代码的耦合性。剥离了lexer,parser和interpreter。值得一提的是,上一篇随笔提到的右括号匹配问题在这里解决了,也是通过添加额外代码解决的。def parse(self): node = self.expr() if self.current_token.type != EOF: self.error原创 2017-02-15 16:57:33 · 1491 阅读 · 0 评论 -
python解释器实现及其嵌入式应用:实现语法支持
第九部分开始了对语言特性的支持,根据语言定义BNF:program→compound_statement DOT program\to compound\_statement\ DOT compound_statement→BEGIN statement_list END compound\_statement\to BEGIN\ statement\_list\ END statement_原创 2017-02-20 15:14:11 · 1002 阅读 · 0 评论 -
python解释器实现及其嵌入式应用:一个四则运算计算器的实现
这是《Let’s build a simple interpreter》中第四部分的练习原文参考一 BNFexpr→term((PLUS/MINUS)term)∗ expr\to term((PLUS/MINUS)term)* term→factor((MUL/DIV)factor)∗ term\to factor((MUL/DIV)factor)* factor→INTERGER factor\t原创 2017-02-13 12:50:52 · 2699 阅读 · 0 评论 -
python解释器实现及其嵌入式应用:1到6章总结
通过1到6部分的学习,实现了一个能进行四则运算,具有优先级,支持括号的计算器。能够满足一般计 算需求的计算器。内容概要巴科斯范式表示grammar。基本知识,以及如何将优先级信息以BNF形式表示。syntax diagram 展示识别流程。等效于BNF,BNF可以理解成文本化的syntax diagram。BNF到python代码的转换体会这六部分内容比较简单,基本上前一部分的练习做完后,原创 2017-02-20 15:06:35 · 1579 阅读 · 0 评论 -
python解释器实现及其嵌入式应用:7到11章总结
从第7章开始引入了抽象语法树,第8章通过扩展抽象语法树引入了单元运算符’+/-‘。第9章扩展pascal语法支持,扩展方法和第8章是一样的,支持begin/end语句,赋值语句,引入全局符号表,存储变量内容。第10章也是语法扩展,支持更多的语法(pragram,var,代码注释)能够识别pascal程序模式,可以算是一个初具功能的解释器了。第11章介绍引入符号表,基于符号表实现语法检查(变量声明,类原创 2017-02-20 15:16:34 · 750 阅读 · 0 评论 -
编译器设计:整型立即数支持
上一篇文章中实现了一个文本打印工具(厚脸皮地叫compiler,^_^),这次加入立即数支持,可以return任意整型值(数据类型目前还不支持)。这次的do_compiler函数采用了闭包机制,实现如下:def do_compile(fout): def write_to_file(ret_num): fout.write(func_start) fout.w原创 2016-11-25 17:38:25 · 7460 阅读 · 0 评论 -
编译器设计: naive compiler
Compiler Design一 方法介绍1-1 Source Language选择C语言作为源语言,从最简单的语句开始,一步一步完善语言支持。1-2 Implementation Language选择python作为实现语言,主要是可以方便测试,而且处理字符很方便。1-3 Implementation PlatformIntel X86,因为我的笔记本是这个,方便。1-4 测试case以及测试d原创 2016-11-22 18:34:52 · 1554 阅读 · 0 评论 -
编译器设计:文法与LL(1)
根据形式语言理论的创立者乔姆斯基(Chomsky)的定义,形式语言的文法分为四种:0型文法 G=(Vn,VT,P,S)G=(V_n, V_T, P, S),如果产生式α→β\alpha\to\beta中,α∈(VN⋃VT)∗\alpha\in(V_N\bigcup V_T)^*且至少有一个终结符,β∈(VN⋃VT)∗\beta\in(V_N\bigcup V_T)^*,那么G就是一个0型文原创 2016-11-22 16:18:47 · 1702 阅读 · 0 评论 -
gcc跨平台编译
在OSX下编译报找不到malloc.h,经过查询是头文件位置不兼容,于是搜索资料,看如何通过宏来兼容不同平台。在OSX下可以通过 gcc -arch i386 -dM -E - < /dev/null | sort 查看gcc定义的预编译宏。可以添加如下代码进行兼容#ifdef _WIN32 //define something for Windows (32-bit and 64-bit,原创 2017-04-23 01:25:55 · 2976 阅读 · 0 评论