crazylab
文章平均质量分 67
billleelh
这个作者很懒,什么都没留下…
展开
-
编译原理实验初步设计
一、语言名称 我是一人团队,鉴于想要完成的语言是类c语言,所以取名为BosiC,即李博的基础C语言。二、语言可能包含设施 首先是语言的基本语法和变量定义:GrammarTokensINT → /* A sequence ofdigits without spaces */FLOAT → /*A real numberconsisting原创 2013-07-08 21:40:02 · 1233 阅读 · 0 评论 -
中间代码生成中的优化
1) 消除仅初始化一次的临时变量:遍历所有中间变量,对于仅仅在t := x时进行过一次赋值的临时变量t置标记,对于有标记的临时变量,遍历中间变量,将t全部替换为x,并且删除原有的t := x,如return 0;会产生中间代码t1 := #0, return t1经过优化后变为return #0 2) 常量计算:遍历所有中间变量,对于x := y +/-/*// z的中间原创 2013-07-08 21:56:08 · 1413 阅读 · 0 评论 -
编译器后端寄存器分配算法SSA(静态单一赋值法)
1 SSA是什么?SSA即静态单赋值,Static Single-Assignment,这是一种中间表示形式。 之所以称之为单赋值,是因为每个名字在SSA中仅被赋值一次.如下图中的一段程序的控制流图。从这张图中可以看到,最后一个基本块中y值的定义或者来自左侧的分支,或者来自右侧的分支。SSA_example1.1将每个赋值语句中的变量赋予一个唯一的名称后原创 2013-07-08 22:01:38 · 4963 阅读 · 1 评论 -
Yacc介绍与使用
概念?什么是YACC?yacc(Yet Another Compiler Compiler),是Unix/Linux上一个用来生成编译器的编译器(编译器代码生成器).使用巴克斯范式(BNF)定义语法,能处理上下文无关文法(context-free)。出现在每个产生式左边(left-hand side:lhs)的符号是非终端符号,出现在产生式右边(right-hand side:转载 2013-07-08 21:42:52 · 1031 阅读 · 0 评论 -
窥孔优化
1 定义:一种很局部的优化方式,编译器仅仅在一个基本块或者多个基本块中,针对已经生成的代码,结合CPU自己指令的特点,过一些认为可能带来性能提升的转换规则,或者通过整体的分析,通过指令转换,提升代码性能。这个窥孔,你可以认为是一个滑动窗口,编译器在实施窥孔优化时,就仅仅分析这个窗口内的指令。每次转换之后,可能还会暴露相邻窗口之间的某些优化机会,所以可以多次调用窥孔优转载 2013-07-08 21:57:53 · 1491 阅读 · 0 评论 -
关于文c--法定义的分析
High-Level Definitions 这一部分包含了C(-)*语言中所有的高层(全局变量以及函数定义)语法。 语法单元Program是初始语法单元,代表整个程序。 每一个Program可以产生一个ExtDefList,这里ExtDefList代表零个或多个ExtDef。 每一个ExtDef就代表着一个全局变量的定义、一个结构体的定义或者一个函数的原创 2013-07-08 21:49:08 · 1134 阅读 · 0 评论 -
分享链接
对于实验一二都很有用的资料链接:http://gps.nju.edu.cn:88/mediawiki/index.php/Bison_Quick_Tutorial转载 2013-07-08 21:52:05 · 423 阅读 · 0 评论 -
编译器后端,寄存器分配算法
寄存器分配,是通过将程序变量尽可能地分配到寄存器,从而提高程序执行速度的一种方法。寄存器是编译器优化中最为重要的问题之一(好的寄存器分配能够提高程序执行速度超过250%);也是编译器理论中最热点的研究领域之一(研究界已经提出来大量寄存器分配相关的算法)。1. 图着色(graph coloring)方法是解决寄存器分配问题最常用的方法。 利用相交图(interferenc转载 2013-07-08 22:00:00 · 3346 阅读 · 0 评论