- 博客(15)
- 资源 (1)
- 收藏
- 关注
原创 语法文件解释器及编译器代码生成
1 文法文件的定义语法文件使用的是LL分析方法。LL分析最简便的就是使用递归程序,或构造自动机。 WACC中,采取的硬编码的方式构造自动机。所谓硬编码,是与上章讲的按表格驱动实现自动机相对的。表格驱动往往采用一种二维数组(有可能是一种压缩的)构成状态转换表。程序读取当前符号和当前状态,查询表格来决定下个状态。代码相对比较短,对于不同的问题,仅仅需要修改表格的内容,而不需要修改代码就能解决。硬编
2014-03-14 23:43:44 1217
原创 R(1)项目集族
1.1 R(1)项目集族1.1.1 LR(1)的定义该定义来自《编译原理及实践》(Kenneth C Louden)定义1:(LR(1)第一部分定义)假设有LR(1)项目[A - > α•Xγ, a],其中X是任意符号(终结符和非终结符),那么X有一个到项目[A - > αX•γ, a]的转换。这个定义实际与WACC对应的的部分是4.2.1节21行CSymbol* CItem:
2014-03-09 21:26:22 2455
原创 Epsilon闭包计算
1.1.1 Epsilon闭包计算同样使用文法S’ - > SS – > ( S ) SS - > 4.2.1节给出了8个项目状态,构成的NFA也有8个状态。如下图:图表 46通过NFA的eposilon转换,我们可以得到该文法的DFA。如下图:图表 47我们可以看到,在NFA向DFA进行eposilon转换的过程
2014-03-09 13:26:21 3248
原创 如何机算?
3 如何机算?机算和手算的算法是一样的,不过要使用机算的话,要将抽象的概念转换为具象代码,还是有一定的难度,但大家不用灰心,我们一步一步地来。3.1 Language定义Language与上面的文法是对应的,知道上面文法的定义为一个四元组(VN, VT, P, S),如何将文法定义具象至代码呢?C/C++没有元组的概念,但是不用着急,我们可以先将元组的特性都抛开,定义一个数据结构,然后
2014-03-08 21:44:05 1001
原创 第一章 first集的计算
第一章 first集的计算现在我们开始自己做的YACC部分,首先我们要计算first集。在计算first集之前,我们要了解关于文法的一些基础知识,理解这部分内容,可能会涉及到离散数学中的关系一章。显然,对关系运算的理解有助于对编译原理的理解。1 基础知识1.1 文法定义参见编译原理教材,可知一个文法定义为一个四元组(VN, VT, P, S)其中VN为非终结符号(或语法实体,或变量
2014-03-08 21:39:32 1742
原创 WACC使用的技术
WACC使用的技术WACC使用的是LALR(1)文法,先行符号集的计算采用的反向传播算法,而不是LR(1)合并同心集的算法。反向传播算法的好处是计算同心集节省空间,而且可以直接通过LR(0)文法DFA(确定性有限自动机)直接生成。本人认为,在编译原理中较难的部分在自底向上的分析,而目前的书籍均在此处退避三舍。即使有,也是手工构造SLR(1)或LR(0)的分析表。作者在在这里给读者揭示编译原
2014-03-08 21:36:47 1160
原创 复杂例子的测试
复杂例子的测试该例子生成的语言较为简单,仅仅支持整数的加减乘,不支持除法,不支持字符串。下面以两个例子展示该语言的语法。测试用例一:计算1+2+….. …+I{计算 1 + 2 +3 + 。。。}A = 0;input I;sum = 0;while A beginsum = sum + A;A = A +1end;print sum用例中,
2014-03-08 21:31:33 832
原创 一个复杂一点的例子
一个复杂一点的例子下面是一个复杂一点的支持Pascal子集的例子。语法文件如下:command->program;program->stmtSeq{ DPRINT("In Reduce:program->stmtSeq\n"); D(1)->Interpreter();};stmtSeq->stmtSeq NEWLINE stmt { DPRINT("
2014-03-08 21:30:14 901
翻译 chrome进程架构
多进程构架该文档描述chromium的定层架构。问题 建一个永不崩溃和阻塞的渲染引擎(rendering engine )几乎是不可能的。同样,做一个绝对安全的渲染引擎也是不可能的。 从某种意义上说,目前web浏览器的状况有点像过去的单用户,多任务的操作系统。应用的误操作会导致整个系统的崩溃。类似,现在的web浏览器中的网页误操作会导致整个web浏览器崩溃。浏览器或插件引入bu
2013-06-13 21:23:27 1419
原创 AVL 树--wiki
AVL树维基百科,自由的百科全书跳转到: 导航, 搜索非 AVL树的例子在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者 G.M.
2009-06-24 11:05:00 963
原创 我做的YACC --2
效果生成的符号属性和DFA报告$: eposilon is 0 nt is 0 value is 0command: eposilon is 0 nt is 1 value is 1exp: eposilon is 0 nt is 1 value is 2ADD: eposilon is 0 nt is 0 value is 3term: eposilon i
2009-05-11 11:04:00 967
原创 我做的YACC --1
前言如果在WiKi中查找YACC。就可以找到这样的一段话:yacc(Yet Another Compiler Compiler),是Unix/Linux上一个用来生成编译器的编译器(编译器代码生成器)。yacc生成的编译器主要是用C语言写成的语法解析器(Parser),需要与词法解析器Lex一起使用,再把两部份产生出来的C程序一并编译。yacc本来只在Unix系统上才有,但现时已普遍移植往
2009-05-11 10:42:00 1502
Rapid+GUI+Programming+with+Python+and+Qt.pdf
2011-07-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人