当前位置:文档之家› (重庆理工大学计算机学院)编译原理课程设计报告

(重庆理工大学计算机学院)编译原理课程设计报告

(重庆理工大学计算机学院)编译原理课程设计报告
(重庆理工大学计算机学院)编译原理课程设计报告

编译原理课程设计报告

实验名称编译原理课程设计

班级

学号

姓名

指导教师

实验成绩

2013 年06月

一、实验目的

通过设计、编写和调试,将正规式转换为不确定的有穷自动机,再将不确定的有穷自动机转换为与之等价的确定的有穷自动机,最后再将确定有穷自动机进行简化。

通过设计、编写和调试构造LR(0)项目集规范簇和LR分析表、对给定的符号串进行LR分析的程序,了解构造LR(0)分析表的步骤,对文法的要求,能够从文法G出发生成LR(0)分析表,并对给定的符号串进行分析。

二、实验内容

正规式——>NFA——>DFA——>MFA

1.正规式转化为不确定的有穷自动机

(1)目的与要求

通过设计、编写和调试将正规式转换为不确定的有穷自动机的程序,使学生了解Thompson算法,掌握转换过程中的相关概念和方法,NFA的表现形式可以是表格或图形。

(2)问题描述

任意给定一个正规式r(包括连接、或、闭包运算),根据Thompson算法设计一个程序,生成与该正规式等价的NFA N。

(3)算法描述

对于Σ上的每个正规式R,可以构造一个Σ上的NFA M,使得L(M)=L(R)。

步骤1:首先构造基本符号的有穷自动机。

步骤2:其次构造连接、或和闭包运算的有穷自动机。

(4)基本要求

算法实现的基本要求是:

(1) 输入一个正规式r;

(2) 输出与正规式r等价的NFA。(5)测试数据

输入正规式:(a|b)*(aa|bb)(a|b)*

得到与之等价的NFA N

(6)输出结果

2.不确定的有穷自动机的确定化

(1)目的与要求

通过设计、编写和调试将不确定的有穷自动机转换为与之等价的确定的有穷自动机的程序,使学生了解子集法,掌握转换过程中的相关概念和方法。DFA的表现形式可以是表格或图形。(2)问题描述

任意给定一个不确定的有穷自动机N,根据算法设计一个程序,将该NFA N变换为与之等价的DFA D。

(3)算法描述

用子集法将NFA转换成接受同样语言的DFA。

步骤一:对状态图进行改造

(1) 增加状态X,Y,使之成为新的唯一的初态和终态。从X引ε弧到原初态结点, 从原终态结

点引ε弧到Y结点。

(2) 对状态图进一步进行如下形式的改变

步骤2:对NFA 进行确定化,构造状态转换表。

(1)

(2) ε_closure的计算,计算ε_closure(T)的简单算法是用栈来保存其弧还没有完成ε转换检查的状态。

(4)基本要求

算法实现的基本要求是:

(1) 输入一个NFA N;

(2) 输出与之等价的DFA。

(5)测试数据

给定不确定的有穷自动机:

得到与之等价的确定的有穷自动机:

(6)输出效果

输出状态转换表表示的确定的有穷自动机如下:

3.确定的有穷自动机的化简

(1)目的与要求

通过设计、编写和调试将确定的有穷自动机的状态数变为最少的程序,使学生掌握化简有穷自动机的过程中的相关概念和方法。DFA的表现形式可以是表格或图形。

(2)问题描述

每一个正规集都可以由一个状态数最少的DFA所识别,这个DFA是唯一的(因状态名不同的同构情况除外)。任意给定一个确定的有穷自动机,根据算法设计一个程序,将该DFA化简为与之等价的最简DFA。

(3)算法描述

1.构造具有两个组的状态集合的初始划分Π:接受状态组F,非接受状态组S-F。

2.对Π采用下面所述的过程来构造新的划分Πnew。

forΠ中每个组G do

begin

当且仅当对任意输入符号a,状态s和t读入a后转换到Π的同一组中;

/*最坏情况下,一个状态就可能成为一个组*/

用所有新形成的小组集代替Πnew中的G;

end

3.如果Πnew=Π,令Πfinal=Π,再执行步骤4;否则,令Π:=Πnew,重复步骤2。

4.在划分Πfinal的每个状态组中选一个状态作为该组的代表。这些代表构成了简化后的DFA M'的状态。另s是一个代表状态,而且假设:在DFA M中,在输入a上有从s到t的转换。令t所在组的代表是r(r可能就是t),那么在M'中有一个从s到r的a上的转换。令包含s0的状态组的代表是M'的开始状态,并令M'的接受状态是那些属于F的状态所在组的代表。注意,Πfinal的每个组或者仅含F中的状态,或者不含F中的状态。

5.如果M'含有死状态(即一个对所有输入符号都有到自身的转换的非接受状态d),则从M'中去掉它;删除从开始状态不可到达的状态;取消从任何其他状态到死状态的转换。

(4)基本要求

算法实现的基本要求是:

(1) 输入一个DFA D;

(2) 输出与之等价的最小化的DFA M。

(5)测试数据

给定确定的有穷自动机:

得到最小化的确定的有穷自动机:

(6)输出效果

LR(0)算法分析

1.构造LR(0)项目集规范簇

(1)问题描述

给定一个LR(0)文法,求出其项目集规范簇,结果以图形或表格的形式输出。

(2)算法描述

设有LR(0)文法G,首先求出其所有的项目,然后根据项目求出其LR(0)项目集规范簇,求项目

(3)测试数据

输入如下所示的文法:

E →aA|bB

A →cA|d

B →cB|d

项目集合为:

(4)结果输出

根据算法得到的项目集规范簇如下图所示:

结果也可以用表格的形式表示如下:

2.构造LR(0)分析表

(1)问题描述

给定一个LR(0)文法,利用6.1得到的项目集规范簇,求出其LR(0)分析表,并以表格的形式输出。

(2)算法描述

LR(0)

(3)基本要求

动态模拟算法的基本功能是:

(1)输入LR分析文法,要求可以直接输入,也可以读入文件;

(2)输出项目集规范簇(可选);

(3)输出LR(0)分析表;

(4)测试数据

输入文法:

E →aA|bB

A →cA|d

B →cB|d

输出LR分析表如下:

3.LR分析过程的实现

(1)问题描述

给定一个LR(0)文法,利用6.2求出其LR(0)分析表;或者给定某个LR分析表(可能不是LR(0)分析表,其分析过程类似),输入一个符号串,依据LR分析表输出与句子对应的语法树,能对语法树生成过程进行模拟。

(2)算法描述

在分析过程中设置一个堆栈和一个分析表,根据分析表和输入符号串对堆栈进行操作,分析器的下一步动作是由栈顶状态Sm和当前面临的输入符号ai唯一确定的。

根据栈顶状态Sm和输入符号ai查action表, 根据表中的内容不同完成不同的动作,若action[Sm, ai]为:

(3)基本要求

动态模拟算法的基本功能是:

(1). 输入LR分析表和一个句子;

(2). 输出LR总控程序;

(3). 输出依据句子构对应的语法树的过程;(4)测试数据

输入句子:i*i+i

输入文法:

(1) E →E+T

(2) E →T

(3) T →T*F

(4) T →F

(5) F→(F)

(6) F →i

和如下所示的LR分析表:

得到如下图所示的LR分析过程:

三、实验方案设计

正规式——>NFA——>DFA——>MFA

1.优先符关系表的定义

//行分别表示:'.','|','(',')','*','#'

//列分别表示:'.','|','(',')','*','#'

char[,] relation = {{'>','>','<','>','<','>'},

{'<','>','<','>','<','>'},

{'<','<','<','=','<','E'},

{'>','>','E','>','>','>'},

{'>','>','E','>','>','>'},

{'<','<','<','E','<','='}};

2.栈定义

///

/// NFA状态栈

///

struct StatusStack

{

public int start;

public int end;

}

StatusStack[] stack_ZT = new StatusStack[100];

///

/// DFA化简状态集合结构

///

struct Tstates

{

public int[] data;//NFA的状态集

public int length;//个数从零开始统计

public bool mark;

public int status;//计数状态

public int accept;//标记开始状态(-1)或结尾状态(1) }

Tstates[] Tstateslt = new Tstates[100];

///

/// MFA状态集

///

struct Mstates

{

public int[] data;

public int length;

public int status;//计数状态

}

Mstates[] Mstateslt = new Mstates[100];

LR(0)算法分析

1.构造LR(0)项目集规范簇

(1)定义变量

string nonterminal = ""; //保存非终结符

string terminal = ""; //保存终结符

string[] grammer = null; //保存文法

List itemsets = null; //项目集规范簇

struct itemsetsNode//项目集

{

public string no;

public List itemsetsNodeValue;

}

class ItemNode

{

string item; //活前缀

string nextSymbol; //后继符号

string nextStatus; //后继状态

}

(2)函数实现

char[] separator = { '\r', '\n' };

grammer = this.txtgrammer.Text.Split(separator, StringSplitOptions.RemoveEmptyEntries); //分割文法符号串

foreach (string tempStr2 in grammer)

{

if (nonterminal.Contains(tempStr2[0]) == false)

nonterminal += tempStr2[0];

}

itemsets = new List(); //实例化存放项目集节点的链表

itemsetsNode tempItemSetNode = new itemsetsNode();

tempItemSetNode.no = "0";

string tempStr = grammer[0];

tempStr = tempStr.Insert(tempStr.IndexOf('>') + 1, "."); tempItemSetNode.itemsetsNodeValue = Item_Closure(tempStr); itemsets.Add(tempItemSetNode);

int k = 0;

while (k < itemsets.Count)

{

foreach(ItemNode tempItemNode in itemsets[k].itemsetsNodeValue)

{

//对每个项目进行处理

List tempItemsetsNode = null;

//若不是是接受态或可规约项,使str中的.向后移一位

string str = tempItemNode.Item;

int index = str.IndexOf('.');

if (index == str.Length - 1) //是接受态或可规约项

{

tempItemNode.NextSymbol = "#";

if (str[0] == nonterminal[0])

tempItemNode.NextStatus = "接受态";

else

tempItemNode.NextStatus = "规约";

continue;

}

str = str.Remove(index, 1);

tempItemNode.NextSymbol = str[index].ToString();

if(nonterminal.Contains(tempItemNode.NextSymbol)

== false) //不是非终结符

{

if(terminal.Contains(tempItemNode.NextSymbol) == false)

terminal += tempItemNode.NextSymbol;

}

str = str.Insert(index + 1, ".");

tempItemsetsNode = Item_Closure(str); //求项目item 的Closure

int row = Find(itemsets, tempItemsetsNode); //查找是否已存在该项目集

if (row == -1) //不存在该项目集

{

tempItemSetNode = new itemsetsNode();

tempItemNode.NextStatus = tempItemSetNode.no = itemsets.Count.ToString();

tempItemSetNode.itemsetsNodeValue = tempItemsetsNode;

itemsets.Add(tempItemSetNode);

}

else

{

tempItemNode.NextStatus = row.ToString();

}

}

k++;

}

display(); //将结果显示在listview中

2.构造LR(0)分析表

(1)定义变量

List actionList = null; //存放action表的内容

List gotoList = null; //存放goto表的内容

(2)函数实现

actionList = new List();

gotoList = new List();

erminal += "#";

//遍历项目集规范簇

foreach (itemsetsNode tempItemSetsNode in itemsets)

{

foreach (ItemNode tempItemNode in

tempItemSetsNode.itemsetsNodeValue)

{

if (tempItemNode.NextSymbol != "#" &&

nonterminal.Contains(tempItemNode.NextSymbol) == true)

{

//后继符号是非终结符号,则想goto表添加内容

GotoNode goTo = new GotoNode();

goTo.Num = int.Parse(tempItemSetsNode.no);

goTo.GoToSymbol = tempItemNode.NextSymbol;

goTo.Value = int.Parse(tempItemNode.NextStatus);

gotoList.Add(goTo);

}

else

{

//后继符号是终结符号,则想antion表添加内容

if (tempItemNode.NextSymbol == "#")

{

if (tempItemNode.Item[0].ToString() == nonterminal[0].ToString()) //表示产生式左边是开始符号

{

ActionNode action = new ActionNode();

action.Num = int.Parse(tempItemSetsNode.no);

action.Symbol = tempItemNode.NextSymbol; action.Value = "acc";

actionList.Add(action);

}

else

{

int k;

for (k = 0; k < grammer.Length; k++)

{

string str = tempItemNode.Item;

str = str.Remove(tempItemNode.Item.Length - 1);

if (grammer[k].Equals(str) == true) {

k++;

break;

}

}

foreach (char ch in terminal)

{

ActionNode action = new ActionNode(); action.Num = int.Parse(tempItemSetsNode.no);

action.Symbol = ch.ToString();

action.Value = "r" + k.ToString(); actionList.Add(action);

}

}

}

else

{

ActionNode action = new ActionNode();

action.Num = int.Parse(tempItemSetsNode.no);

action.Symbol = tempItemNode.NextSymbol;

action.Value = "s" + tempItemNode.NextStatus;

actionList.Add(action);

}

}

}

}

DisplayLrTable(this.listView2);

3.LR分析过程的实现

(1)变量定义

int stepCount = 0;

Stack statusStack = null; //状态栈

Stack symbolStack = null; //符号栈

四、实验测试

正规式——>NFA——>DFA——>MFA

(1)输入一个表达式,将表达式转换为NFA

(2)将NFA转换为DFA

(3)将生成的DFA进行确定化,生成MFA

LR(0)算法分析

(1)从文件读入LR(0)文法后构造LR(0)项目集规范簇

编译原理课程设计

《编译原理》课程设计大纲 课程编号: 课程名称:编译原理/Compiler Principles 周数/学分:1周/1学分 先修课程:高级程序设计语言、汇编语言、离散数学、数据结构 适用专业:计算机科学与技术专业、软件工程专业 开课学院,系或教研室:计算机科学与技术学院 一、课程设计的目的 课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,设计题中的问题比平时的练习题要复杂,也更接近实际。编译原理这门课程安排的课程设计的目的是旨在要求学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构表示问题,然后编制算法和程序完成设计要求,从而进一步培养学生独立思考问题、分析问题、解决实际问题的动手能力。 要求学生在上机前应认真做好各种准备工作,熟悉机器的操作系统和语言的集成环境,独立完成算法编制和程序代码的编写。 设计时间: 开发工具: (1) DOS环境下使用Turbo C; (2) Windows环境下使用Visual C++ 。 (3) 其它熟悉语言。 二、课程设计的内容和要求 设计题一:算术表达式的语法分析及语义分析程序设计。 1.目的

通过设计、编制、调试一个算术表达式的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词 法检查和分析。 2.设计内容及要求: 算术表达式的文法: 〈无符号整数〉∷= 〈数字〉{〈数字〉} 〈标志符〉∷= 〈字母〉{〈字母〉|〈数字〉} 〈表达式〉∷= [+|-]〈项〉{〈加法运算符〉〈项〉} 〈项〉∷= 〈因子〉{〈乘法运算符〉〈因子〉} 〈因子〉∷= 〈标志符〉|〈无符号整数〉|‘(’〈表达式〉‘)’ 〈加法运算符〉∷= +|- 〈乘法运算符〉∷= *|/ (1) 分别选择递归下降法、算符优先分析法(或简单优 先法)完成以上任务,中间代码选用逆波兰式。 (2) 分别选择LL(1)、LR法完成以上任务,中间代码选 用四元式。 (3) 写出算术表达式的符合分析方法要求的文法,给出 分析方法的思想,完成分析程序设计。 (4) 编制好分析程序后,设计若干用例,上机测试并通 过所设计的分析程序。 设计题二:简单计算器的设计 1.目的 通过设计、编制、调试一个简单计算器程序,加深对语法及语 义分析原理的理解,并实现词法分析程序对单词序列的词法检 查和分析。 2.设计内容及要求 算术表达式的文法:

重庆理工大学数据库原理试卷

一、单项选择题(本大题共10小题,每小题2分,共20分) 1、SQL语言中,删除一个表的命令是( B ) A.DELETE B.DROP C.CLEAR D.REMOVE 2、从关系中挑选出指定的属性组成新关系的运算称为( B ) A."选取"运算B."投影"运算C."联接"运算D."交"运算 3、SQLServer2000是一个基于( D ) A.层次模型的DBMS B.网状模型的DBMS C.关系模型的应用程序D.关系模型的DBMS 4、在SQL语言中,条件“BETWEEN 20 AND 30”表示年龄在20到30之间,且(A ) A.包括20岁和30岁B.不包括20岁和30岁 C.包括20岁不包括30岁D.不包括20岁包括30岁 5、部分匹配查询中有关通配符“%”的正确的叙述是( B ) A.“%”代表2个字符 B.“%”可以代表零个或多个字符 C.“_”不能与“%”一同使用 D.“%”代表一个字符 6、现实世界中,事物的一般特性在信息世界中称为( C ) A.实体B.实体键C.属性D.关系键 7、下面有关主键的叙述正确的是( B ) A.不同的记录可以具有重复的主键值或空值 B.一个表中的主键可以是一个或多个字段 C.在一个表中主键只可以是一个字段 D.表中的主键的数据类型必须定义为自动编号或文本 8、DBS是采用了数据库技术的计算机系统。DBS是一个集合体,包含数据库、计算机硬件、软件和( C ) A.系统分析员B.程序员C.数据库管理员D.操作员 9、在查询中,为了避免重复行的关键字是( C ) A.UNIQUE B.COUNT C.DISDINCT D.UNION 10、关系模型中的关系模式至少是( A )。 A. 1NF B. 2NF C. 3NF D. BCNF 二、填空题(每题3分,共30分) 1、数据库系统中常用的三种数据模型有层次模型、网状模型和关系模 型。 2、为数据库的用户授权用Grant 子句。 3、数据模型的约束包括实体完整性约束、参照完整性约束和域完整性。 4、数据库恢复要涉及到的两种技术分别是数据转储和登录日志文件。

兰州理工大学微机原理试题3

一、单选题 得分 1 2 3 4 5 6 7 8 9 10 1. n+1位符号数x的补码表示范围为() A. -2n<x<2n B. -2n≤x≤2n C. -2n -1≤x<2n D. -2n ≤x<2n 2. 微处理器系统中采用存储器映像方式编址时存储单元与I/O端口是通过() 来区分的。 A. 不同的地址编码 B. 不同的读/写控制逻辑 C. 专用I/O指令 3. 微型计算机各部件之间是用()连接起来的。 A. 系统总线 B. AB C.CB D.DB 4. 带符号十进制数10,在数据单元中的二进制表示为()。 A. 00000010 B. 10000010 C. 00001010 D. 10001010 5. 若用128K*4bit的SRAM芯片构成640KB的存储器组织,共需要()片芯 片。 30 D. 40 10 B. 20 C. A. 6. 下列8088指令中,含有非法操作数寻址的指令是()。 IN AX,DX B. A. MOV AX,[10H] C. MOV [BX][BP],10H D. MOV BX,COUN[SI] 7. 若要使寄存器AL中的高4位不变,低4位清零,应使用指令()。 AND AL,0F0H A. AND AL,0FH B. OR AL,0F0H AL,0FH D. OR C. 8. 若CPU的地址线为共16条,而某存储器芯片单元为2K,则加在该存储器芯 片上的地址线为( )。 A. A0 ~ A10 B. A0 ~ A11 C. A0 ~ A12 D. A0 ~ A13 9. 8259A需( ) 片级连可以扩展为64级优先级。 9片 B. 8片 C. 7片 D. 6片 A. 10. 在数据传送指令中要注意:立即数只能作为()。 A. 源操作数 B. 目的操作数 C. 源操作数和目的操作数 D.源操作数或目的操作数 二、编程题(10分) 1.有1K个单元的数据放在内存DAT开始的顺序单元中,试编程将其转移到以NEXT开始的顺序单元中。 三、填空题

编译原理课程设计报告_LL(1)分析过程模拟

课程设计(论文)任务书 软件学院学院软件工程专业07-1班 一、课程设计(论文)题目LL(1)分析过程模拟 二、课程设计(论文)工作自 2010 年 6 月 22日起至 2010 年 6月 28 日止。 三、课程设计(论文) 地点: 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)使学生掌握LL(1)模块的基本工作原理; (2)培养学生基本掌握LL(1)分析的基本思路和方法; (3)使学生掌握LL(1)的调试; (4)培养学生分析、解决问题的能力; (5)提高学生的科技论文写作能力。 2.课程设计的任务及要求 1)基本要求: (1)分析LL(1)模块的工作原理; (2)提出程序的设计方案; (3)对所设计程序进行调试。 2)创新要求: 在基本要求达到后,可进行创新设计,如改算法效率。 3)课程设计论文编写要求 (1)要按照书稿的规格打印誊写课程设计论文 (2)论文包括目录、绪论、正文、小结、参考文献、附录等 (3)课程设计论文装订按学校的统一要求完成 4)答辩与评分标准: (1)完成原理分析:20分; (2)完成设计过程(含翻译):40分; (3)完成调试:20分;

(4)回答问题:20分。 5)参考文献: (1)张素琴,吕映芝,蒋维杜,戴桂兰.编译原理(第2版).清华大学出版社 (2)丁振凡.《Java语言实用教程》北京邮电大学出版社 6)课程设计进度安排 内容天数地点 构思及收集资料2图书馆 编程与调试4实验室 撰写论文1图书馆、实验室 学生签名: 2009 年6 月22 日 课程设计(论文)评审意见 (1)完成原理分析(20分):优()、良()、中()、一般()、差();(2)设计分析(20分):优()、良()、中()、一般()、差();(3)完成调试(20分):优()、良()、中()、一般()、差();(4)翻译能力(20分):优()、良()、中()、一般()、差();(5)回答问题(20分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是()、否() 评阅人:职称: 年月日

武汉理工大学09级微机原理试题A

武汉理工大学考试试题纸(闭卷A) 课程名称微机原理与通信接口专业班级信息工程学院07级 一:选择题(每题2分,共20分) 1.PC机中确定硬中断服务程序的入口地址是() A:主程序中的调用指令 B:主程序中的转移指令 C:中断控制器发出的类型码 D:中断控制器中的中断服务寄存器(ISR)2.CPU中程序计数器(PC)中存放的是( ) A:指令 B:指令地址 C:操作数 D:操作数地址个数 3.在DMA方式下,CPU与总线的关系是( ). A:只能控制数据总线 B:只能控制地址总线 C:成隔离状态 D:成短接状态 4.8088微处理器可寻址访问的最大I/O空间为( ) A:1KB B:64KB C:640KB D:1MB 5、在指令MOV [BX+SI+5],AX中,目的操作数的寻址方式是()。 A、寄存器间接寻址 B、基址加变址寻址 C、相对的基址和变址寻址 D、寄存器寻址 6.当8086/8088访问100H端口时,采用( )寻址方式. A:直接 B:立即 C:寄存器间接 D:相对 7、在实方式下,中断矢量号乘以()可以得到相应的中断矢量地址。 A、2 B、4 C、6 D、8 8.在任何一个总线周期的T1状态,ALE输出( ) A:高电平 B:低电平 C:高阻态 D:无电流 9、下列语句中,正确的语句是( )。 A、MOV AX, [AX] B、MOV BX, [BX] C、MOV CX, [CX] D、MOV DX, [DX] 10、8086CPU对I/O接口编址采用。 A、I/O端口和存储器统一编址 B、I/O端口和寄存器统一编址 C、输入和输出口分别编址 D、I/O端口单独编址 二:填空题(每题2分,共20分) 1.将十进制数23.6875转换成相应的十六进制数________H. 2.当总线上所接负载超过总线的负载能力时,必须在总线和负载之间加接缓冲器或驱动器,最常用的是_________,其作用是驱动(使信号电流加大,可带动更多负载)和隔离(减少负载对总线信号的影响)。

编译原理课程设计

编译原理课程设计报告 课题名称: C-语言编译器设计(scanner和parser) 提交文档学生姓名: 提交文档学生学号: 同组成员名单:无 指导教师姓名:金军 指导教师评阅成绩: 指导教师评阅意见: . . 提交报告时间: 2011年 6 月 17 日

1.课程设计目标 设计C-Minus编译器分为scanner和parser两个部分。scanner主要作用是对目标代码进行扫描,列出关键字,变量等内容;parser主要对语法进行分析并生成语法树。 2.分析与设计 ●实现方法:代码用C语言编译而成。其中scanner为手工实现,主要采用switch-case结构实现 状态转换;parser部分采用递归下降分析方法实现。 ●扫描器:C-的词法如下: 1、语言的关键字:i f el se i nt return void while 2、专用符号:+ - * /< <= > >= == != =; , ( ) [ ] { } /* */ 3、其他标记是变量(ID)和数字(NUM),通过下列正则表达式定义: ID = letter letter* NUM = di git digi t* letter = a|..|z|A|..|Z digi t = 0|..|9 4、空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开ID、NUM关键字 5. 注释用通常的C语言符号/ * . . . * /围起来。注释可以放在任何空白出现的位置(即注释不能放在 标记内)上,且可以超过一行。注释不能嵌套 其DFA图如下:

分析器:以下为C-的语法规则BNF:

编译原理课程设计报告(一个完整的编译器)

编译原理程序设计报告 一个简单文法的编译器的设计与实现专业班级:计算机1406班 组长姓名:宋世波 组长学号: 20143753 指导教师:肖桐 2016年12月

设计分工 组长学号及姓名:宋世波20143753 分工:文法及数据结构设计 词法分析 语法分析(LL1) 基于DAG的中间代码优化 部分目标代码生成 组员1学号及姓名:黄润华20143740 分工:中间代码生成(LR0) 部分目标代码生成 组员2学号及姓名:孙何奇20143754 分工:符号表组织 部分目标代码生成

摘要 编译器是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能解读、运行的低阶机器语言的程序。编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。 一.编译器的概述 1.编译器的概念 编译器是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能解读、运行的低阶机器语言的程序。编译器将原始程序作为输入,翻译产生使用目标语言的等价程序。源代码一般为高阶语言如Pascal、C++、Java 等,而目标语言则是汇编语言或目标机器的目标代码,有时也称作机器代码。 2.编译器的种类 编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高阶语言作为输入,输出也是高阶语言的编译器。例如: 自动并行化编译器经常采用一种高阶语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语

第3版微机原理及接口技术武汉理工大学考试试题答案(2014A卷)

…………装订线………………装订线内不要答题,不要填写信息………………装订线………… 武汉理工大学考试试题答案(A卷)2014 ~2015 学年1 学期微机原理及接口技术课程 一、单项选择题(每小题2分,共20分) 1.A 2.B 3.C 4.D 5.D 6.C 7.B 8.A 9.C 10.B 二、填空题(每空2分,共20分) 1. -128~+127 2. 0FBH 3. 0000H 4. 58H~5BH 5.区分存储器访问与I/O访问 6. 控制 7.1FFEH 8.上升沿 9. 锁存地址,保证T2、T3周期中地址与数据同时有效10. 0 三、简答题(每小题5分,共15分) 1.读中断类型号;压标志寄存器;关中断;保护断点;找中断服务入口地址(各1分)。 2. 两种工作模式:(1)最小工作模式(1分),系统中只有8086一个微处理器, 适用于小型系统(1分);(2)最大工作模式(1分),即系统中包含两个或多个微处理器,其中一个主处理器就是8086,其他为协处理器,适用于中等规模或大型的系统中(1分)。MX MN/引脚接高电平,CPU处于最小工作模式;接低电平,处于最大工作模式(1分)。 3. 一般CPU与外设间有差异,体现在:速度、电平规范、串并数据格式、外部时序要求等(3分),因此需要接口电路作为连接的桥梁,需要在数据传送前进行联络,一般要传送命令、数据、状态三个方面的信息,这都需要建立连接与交换的通道(2分)。 四、程序阅读题,简述其功能(每小题5分,共10分) 1.该程序片段的功能是提取AL高四位的值(2分),执行结束后AL = 0AH(3分)。 2. 该程序片段的功能是将位于0~9间的ASCⅡ码转换为其对应的值(2分),执行结束后AL = 06H(3分)。 五、编程题(15分) DATA SEGMENT ;定义数据段、代码段等合计(1分)BUFF DB 1,2,-3,0,-1,6 ;定义BUFF数据缓冲区(1分) COUNT DB ? ;定义COUNT变量(1分) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DA TA, ES:DATA ;假定段名和段寄存器关系MAIN PROC FAR ;定义主函数等其余格式(1分) START: MOV AX, DATA MOV DS, AX ;初始化DS到数据段(1分)

CMinus词法分析和语法分析设计编译器编译原理课程设计报告书

编译原理课程设计报告 课题名称:C- Minus词法分析和语法分析设计 提交文档学生姓名:X X X 提交文档学生学号:XXXXXXXXXX 同组成员名单:X X X 指导教师姓名:X X 指导教师评阅成绩: 指导教师评阅意见: . . 提交报告时间:2015年6月10日

1.课程设计目标 实验建立C-编译器。只含有扫描程序(scanner)和语法分析(parser)部分。 2.分析与设计 C-编译器设计的整体框架,本实验实现扫描处理和语法分析程序(图中粗黑部分)。 2.1 、扫描程序scanner部分 2.1.1系统设计思想 设计思想:根据DFA图用switch-case结构实现状态转换。 惯用词法:

①语言的关键字:else if int return void while ②专用符号:+ - * / < <= > >= == != = ; , ( ) [ ] { } /* */ ③其他标记是ID和NUM,通过下列正则表达式定义: ID = letter letter* NUM = digit digit* letter = a|..|z|A|..|Z digit = 0|..|9 大写和小写字母是有区别的 ④空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开ID、NUM 关键字。 ⑤注释用通常的C语言符号/ * . . . * /围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套 scanner的DFA

说明:当输入的字符使DFA到达接受状态的时候,则可以确定一个单词了。初始状态设置为START,当需要得到下一个token时,取得次token的第一个字符,并且按照DFA与对此字符的类型分析,转换状态。重复此步骤,直到DONE为止,输出token类型。当字符为“/”时,状态转换为SLAH再判断下一个字符,如果为“*”则继续转到INCOMMENT,最后以“*”时转到ENDCOMMENT状态,表明是注释,如果其他的则是字符停滞于当前字符,并且输出“/”。 2.1.2程序流程图

(重庆理工大学计算机学院)编译原理课程设计报告

编译原理课程设计报告 实验名称编译原理课程设计 班级 学号 姓名 指导教师 实验成绩 2013 年06月

一、实验目的 通过设计、编写和调试,将正规式转换为不确定的有穷自动机,再将不确定的有穷自动机转换为与之等价的确定的有穷自动机,最后再将确定有穷自动机进行简化。 通过设计、编写和调试构造LR(0)项目集规范簇和LR分析表、对给定的符号串进行LR分析的程序,了解构造LR(0)分析表的步骤,对文法的要求,能够从文法G出发生成LR(0)分析表,并对给定的符号串进行分析。 二、实验内容 正规式——>NFA——>DFA——>MFA 1.正规式转化为不确定的有穷自动机 (1)目的与要求 通过设计、编写和调试将正规式转换为不确定的有穷自动机的程序,使学生了解Thompson算法,掌握转换过程中的相关概念和方法,NFA的表现形式可以是表格或图形。 (2)问题描述 任意给定一个正规式r(包括连接、或、闭包运算),根据Thompson算法设计一个程序,生成与该正规式等价的NFA N。 (3)算法描述 对于Σ上的每个正规式R,可以构造一个Σ上的NFA M,使得L(M)=L(R)。 步骤1:首先构造基本符号的有穷自动机。 步骤2:其次构造连接、或和闭包运算的有穷自动机。

(4)基本要求 算法实现的基本要求是: (1) 输入一个正规式r; (2) 输出与正规式r等价的NFA。(5)测试数据 输入正规式:(a|b)*(aa|bb)(a|b)* 得到与之等价的NFA N

(6)输出结果 2.不确定的有穷自动机的确定化 (1)目的与要求 通过设计、编写和调试将不确定的有穷自动机转换为与之等价的确定的有穷自动机的程序,使学生了解子集法,掌握转换过程中的相关概念和方法。DFA的表现形式可以是表格或图形。(2)问题描述 任意给定一个不确定的有穷自动机N,根据算法设计一个程序,将该NFA N变换为与之等价的DFA D。 (3)算法描述 用子集法将NFA转换成接受同样语言的DFA。 步骤一:对状态图进行改造 (1) 增加状态X,Y,使之成为新的唯一的初态和终态。从X引ε弧到原初态结点, 从原终态结 点引ε弧到Y结点。 (2) 对状态图进一步进行如下形式的改变

东华理工大学工科《微机原理及应用》试卷及答案

2008-2009学年第二学期 一、 填空题(每空1分共30分) 1、 101111.101B=___ 5E.A __H=___ 94.625 __D 78.5H=___1111000.0101__B=___120.3125__D 256.5D=____100.8__H=__________BCD 2、微机中的片级总线一般由三类线构成,分别是控制总线、数据总线、地址总线。 3、8250是可编程串行接口芯片,8259A是可编程中断控制芯片。 4、8088 CPU地址总线为 20 位,片外数据总线为 8 位。 5、组成16Kx8位的存储器,需 8 片4Kx4位的RAM芯片,若采用16Kx4的RAM芯片,则需要 2 片。 6、8086/8088 CPU中有4个段寄存器,分别是 CS 、 DS 、SS 、 ES 。 7、以下指令,执行前:DS=4000H, BX=0200H, SI=0008H, AX=789AH 执行指令MOV [BX+SI],AX ,其目的操作数地址为 0208 H,指令执行后,目的操作数中的内容为 40208H ,目的操作数是基址变址寻址方式。8、计算机通常运算器和控制器是核心部件,合称为中央处理单元CPU。 9、8088CPU通过系统总线对片外存储器进行一次访问所需要的时间为一个总线周期,一个总线周期至少包括 4 时钟周期。 10、8088CPU最小模式下的,I0/ M引脚信号为高电平时选中外部端口地址,为低电平时选中存储器地址。 二、选择题(每题2分共20分) 1、IBM PC采用分段管理内存,每段最大可达___B____。 A)16KB B)64KBit C)64KB D)256KB 2、微型计算机的典型结构包括三个主要组成部分,它们是 ___C____。 A)CPU、运算器、I/O接口 B)CPU、控制器、存储器C)CPU、存储器、I/O接口 D)CPU、I/O接口、外设3、微机的各组成部分,用__B___把它们连在一起。 A)数据总线 B)系统总线 C)控制总线 D)地址总线4、下列寄存器中,不属于段寄存器的是___D____。 A)ES B)CS C)SS D)BX 5、能够被CPU直接识别的语言是( D ) A)汇编语言 B)高级语言 C)应用语言 D)机器语言 6、CPU执行了某一____A__,则栈顶内容返回到CS和IP中。

编译原理课程设计

编译原理课程设计 自顶向下语法分析器 学院(系):计算机科学与技术学院学生姓名:xxxxxxxxx 学号:xxxxxxxxx 班级:电计1102 大连理工大学 Dalian University of Technology

目录

1 系统概论 语法分析是编译过程的核心部分。它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。语法分析器在编译程序中的地位如图1所示: 图1 语法分析器在编译程序中的地位 语言的语法结构是用上下文无关文法描述的。因此,语法分析器的工作本质上就是按文法的产生式,识别输入符号串是否为一个句子。这里所说的输入串是指由单词符号(文法的终结符)组成的有限序列。对一个文法,当给你一串(终结)符号时,怎样知道它是不是该文法的一个句子呢?这就要判断,看是否能从文法的开始符号出发推导出这个输入串。或者,从概念上讲,就是要建立一棵与输入串相匹配的语法分析树。 自顶向下分析法就是语法分析办法中的一类。顾名思义,自顶向下就是从文法的开始符号出发,向下推导,推出句子。这种方法是带“回溯”的。 自顶向下分析的主旨是,对任何输入串,试图用一切可能的办法,从文法开始符号(根结)出发,自上而下地为输入串建立一棵语法树。或者说,为输入串寻找一个最左推导。这种分析过程本质上是一种试探过程,是反复使用不同产生式谋求匹配输入串的过程。 实现这种自顶向下的带回溯试探法的一个简单途径是让每个非终结符对应一个递归子程序。每个这种子程序可作为一个布尔过程。一旦发现它的某个候选与输入串相匹配,就用这个候选去扩展语法树,并返回“真”值;否则,保持原来的语法树和IP值不变,并返回“假”值。 2 需求分析 以前,人们对语法的分析都建立在人工的基础上,人工分析虽然能够做到侧类旁推,但终究人力有限,再精密的分析都会出现或多或少的错误。为减少因人为产生的错误,并加快

编译原理课程设计报告

2011-2012学年第二学期 《编译原理》课程设计报告 学院:计算机科学与工程学院 班级: 学生姓名:学号: 成绩: 指导教师: 时间:2012年5 月

目录 一、课程设计的目的 ---------------------------------------------------------------- - 1 - 二、课堂实验及课程设计的内容 -------------------------------------------------- - 1 - 2.1、课堂实验内容-------------------------------------------------------------- - 1 - 2.2、课程设计内容-------------------------------------------------------------- - 1 - 三、visual studio 2008 简介------------------------------------------------------- - 2 - 四、问题分析及相关原理介绍 ----------------------------------------------------- - 3 - 4.1、实验部分问题分析及相关原理介绍 ---------------------------------- - 3 - 4.1.1、词法分析功能介绍及分析------------------------------------- - 3 - 4.1.2、语法分析功能介绍及分析------------------------------------- - 3 - 4.1.3、语义分析功能介绍及分析------------------------------------- - 4 - 4.2、课程设计部分问题分析及相关原理介绍 ---------------------------- - 5 - 4.2.1、编译程序介绍 ----------------------------------------------------- - 5 - 4.2.2、对所写编译程序的源语言的描述(C语言) -------------- - 6 - 4.2.3、各部分的功能介绍及分析 -------------------------------------- - 7 - 4.3、关键算法:单词的识别-------------------------------------------------- - 8 - 4.3.1、算法思想介绍 ----------------------------------------------------- - 8 - 4.3.2、算法功能及分析 -------------------------------------------------- - 8 - 五、设计思路及关键问题的解决方法 ------------------------------------------ - 10 - 5.1、编译系统------------------------------------------------------------------ - 10 - 5.1.1、设计思路 --------------------------------------------------------- - 10 - 5.2、词法分析器总控算法--------------------------------------------------- - 12 - 5.2.1、设计思路 --------------------------------------------------------- - 12 - 5.2.2、关键问题及其解决方法 --------------------------------------- - 13 - 六、结果及测试分析-------------------------------------------------------------- - 14 - 6.1、软件运行环境及限制--------------------------------------------------- - 14 - 6.2、测试数据说明------------------------------------------------------------ - 14 - 6.3、运行结果及功能说明--------------------------------------------------- - 16 - 6.4、测试及分析说明--------------------------------------------------------- - 16 - 七、总结及心得体会 --------------------------------------------------------------- - 17 - 7.1、设计过程------------------------------------------------------------------ - 17 - 7.2、困难与收获 ------------------------------------------------------------- - 17 - 八、参考文献 ------------------------------------------------------------------------ - 18 -

编译原理课程设计

编译原理: 编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。编译原理是计算机专业设置的一门重要的专业课程。编译原理课程是计算机相关专业学生的必修课程和高等学校培养计算机专业人才的基础及核心课程,同时也是计算机专业课程中最难及最挑战学习能力的课程之一。编译原理课程内容主要是原理性质,高度抽象。 编译原理课程设计: 《编译原理课程设计》是2007年11月浙江大学出版社出版的图书,作者是冯雁、鲁东明、李莹。 内容简介: 本书围绕着编译技术的基本原理和方法,以模拟程序设计语言SPL的编译器的设计和实现为主线,结合词法分析、语法分析、语义分析、代码生成、代码优化、错误处理等各个基本模块,对原理和实现方法进行了详细分析。该编译器可接受SPL的程序,并将其翻译成汇编语言程序,最终实现汇编语言到8086/8088机器语言的翻译。本书为编译技术等相关课程的实验提供了参考。在附件中还提供了三类不同类型和难度的实验题,可供课程实验选择。 第1章引论: 1.1本书介绍 1.2SPL语言的特点及实验安排

1.2.1SPL语言的特点 1.2.2SPL语言编译器的主要结构1.2.3实验安排 1.3平台的选择和介绍 1.3.1LEX简介 1.3.2YACC简介 第2章词法分析: 2.1词法分析器的基本框架 2.2词法分析器的基本原理 2.2.1DFA的构造和实现 2.2.2词法分析的预处理 2.2.3实现词法分析器的注意要点2.3词法分析器的实现 2.3.1SPL语言单词属性字 2.3.2SPL词法分析器的输入和输出2.3.3SPL词法分析器的分析识别第3章语法分析: 3.1语法分析的基本框架 3.1.1上下文无关文法 3.1.2语法分析过程 3.1.3语法分析过程中的数据结构3.2语法分析的基本方法

《微机原理与接口技术》 练习题2

《微机原理与接口技术》练习题2 一、选择题(每题2分,15题,共30分) 1.以下各指令中正确的是()。 A.IN 63H,AX B.IN AL,63H C.MOV ES,2D00H D.MOV [DI],[SI] 2. 在汇编语句MOV AX,[BX+SI]中,源操作数的寻址方式是( ) A.直接寻址B.基址寻址 C.间址寻址D.基址加间址寻址 3. 设字长n=8位,[X]补码=0CAH,[Y]补码=0BCH,则求[X+Y]补码时得到的结果、溢出标志OF和辅助进位标志AF分别为()。 A.86H,OF=0和AF=0 B.86H,OF=0和AF=1 C.186H,OF=1和AF=0 D.186H,OF=1和AF=1 4. 已知AL=75H,BL=92H,则两条语句: ADD AL,BL DAA 执行后AL及进位标志CF的值分别为() A.67H和0 B.07H和1 C.67H和1 D.F7H和1 5. 已知内存单元20510H中存放31H,内存单元20511H中存放32H,内存单元30510H中存放42H,内存单元30511H中存放43H且AX = 3A7BH,DS=2000H, SS=3000H, BP = 0500H,则语句“MOV AL, [BP+10H]”,则执行后AX的值为()。 A. 3A31H B. 3231H C. 427BH D. 3A42H 6. 数据在内存中常以()为单位进行存储. A. 字 B.位 C.字节 D.双字 7. 指令“CALL FAR PTR Isum”执行时将会向堆栈中依次压入()。 A. IP和CS B. CS和IP B. 标志寄存器值和IP D. 标志寄存器值,CS和IP 8. 如果SP=2000H,则指令PUSH AX,PUSH BX,POP AX,PUSH DX执行后,SP的值为( ) A.2000H B.1FFEH C.1FFCH D.1996H 9. 指令JMP DWORD PTR [SI]的寻址方式为()。 A. 段内直接转移 B. 段内间接转移 C. 段间直接转移 D. 段间间接转移 10.FAR型过程中有指令“RET 4”执行前SP=1000H,则该指令执行完后SP的值为()。 A.0FF6H B.0FF8H C.1006H D.1008H 11.中断类型号为10H的中断向量存放在内存地址()开始的四个物理存储单元中。 A.21H B.40H C.43H D.128H 12. 指令JMP WORD PTR [SI]的寻址方式为()。 A. 段内直接转移 B. 段内间接转移 C. 段间直接转移 D. 段间间接转移

编译原理课程设计

先简要分析一下语法分析的大致流程: 当有句子要进行处理时,首先要对其进行词法分析来分解出该句子中的每个符号,然后将该句子按照算符优先算法压入归约栈中,如果可以顺利归约,则说明这是一个合法的句子,否则该句子非法。 这里有一个需要考虑的地方,就是如何进行归约。由于文法已经给定,所以我们考虑设计一个文法表,文法表中的内容就是可归约串的种别码的顺序,比如v=E可以表示为9,1,13。这样的话当我们要进行一次归约时,只用按顺序存储最左素短语中符号的种别码,然后拿这个种别码序列与文法表进行匹配,就可知道当前归约需要执行哪些操作。 还有一点需要注意,就是如何对一个表达式进行求值。这里需要我们设计一个二元组的变量名表,这个变量名表可以根据变量的名称来返回变量的数据。变量名表的具体设计见详细设计部分。 由于是简化分析,所以这个程序只考虑整数的处理。 有了上面的分析,可以构造出算符优先分析算法的流程图,如下图所示。

详细设计 (1)词法分析部分 由于词法分析的内容在课程设计1中已经介绍,并且这次的状态转换图与课程设计1中的非常相似,所以这里就不过多介绍。(2)优先关系表 在程序中我们用一个二维数组priTable[][]来存储算符间的优先关系。priTable[a][b]=1表示a>b; 。priTable[a][b]=0表示a=b; 。priTable[a][b]=-1表示a

重庆邮电大学微机原理与接口技术

2010/2011上学期《微机原理与接口技术》复习提纲 第1章微型计算机运算基础(填空、选择) 1.各个进制之间的转换。例如(123)10=( )2=( )8 (37A.B)16=( )10 20.8125=( )2= ( )16 2.原码、补码及反码 假设[X]补=00A7H, 则X= ( )H Y = -50,则Y的16比特补码=( )2 已知[Z]补=A53BH,则[Z]原=( )H 3.已知[X]补=7985H, [Y]补=5035H,则[X+Y]补=( )H,是否有进位和溢出? 4.16位有符号数A09BH与90A1H谁大谁小?如果两数相减CF及OF值为多少? 5.16位无符号数A09BH与70A1H谁大谁小?如果两数相减CF及OF值为多少? 第2章80X86微型计算机系统(填空、选择、简答) 1.计算机系统的硬件组成:5个部分。 2.根据总线的用途,分为哪三种。 3.80486的寄存器分为哪4类。其中基本结构寄存器的通用寄存器有哪些?段寄存器有哪些? 4.在实模式下,80x86存储系统可以寻址物理存储空间1MB,且段地址16位,段内偏移地址(有效地址)16位。20位的内存物理地址=段地址*16+偏移地址。多个逻辑地址可以对应同一个物理地址。逻辑地址由段地址和物理地址组成。例如1234H:0005H,1200H:345H,1234H:0005H都表示同一个物理地址12345H。代码段、数据段等的地址空间可以相同,也可以重叠。 5.在保护模式下,80486存储系统可以寻址物理存储空间4GB, 80286存储系统可寻址16MB。在保护模式下80486可以访问214个段,每个段长度达4GB,故总虚拟地址空间246B。在保护模式下80286可以访问214个段,每个段长度达64KB,故总虚拟地址空间230B。 6.80X86的I/O地址空间与存储空间独立编址。I/O空间可以达216B。 7.80486的数据总线32根,中断请求线2根即INTR和NMI。 第3章80X86指令系统(填空、选择、简答) 1.CPU能够直接识别和执行的二进制编码的命令称作指令。一个CPU能够执行的所有指令的集合就是该CPU的指令系统。指令码由操作码和地址码构成。 2.存放操作数时,低字节存放低地址,高字节存放高地址。 3.寻址方式分为操作数寻址与程序转移寻址。操作数寻址有立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,基址寻址,变址寻址(可含比例因子),基址加变址寻址(可含比例因子)。注意凡是含有BP,EBP,ESP作为基址寄存器的默认采用SS作为段寄存器,其他情况默认使用DS。也可以采用段前缀来说明使用哪个段寄存器。例如:MOV AX, [BX+10H]将使用DS;MOV AX, [EAX+EBP]将使用SS; MOV AX, [EBP*2+EAX]将使用DS;MOV AX,FS: [EBP*2+EAX] 将使用FS。MOV AX, [BX+BP]为非法寻址,MOV AX, [DX+5]为非法寻址。MOV AX, 1000H为非法指令。 4.80486的32位标志寄存器掌握OF, DF, IF, TF, SF, ZF, AF, PF, CF的含义。加减运算后判断SF, ZF, AF, PF, CF及OF的值。AND,OR, NOT,TEST后CF为0。移位指令(SHR, ROR, RCR等)后影响CF,PF。5.80x86的指令系统:(1)数据传送类指令(MOV, MOVSX, MOVZX, XLA T,PUSH,PUSHF/POPF, PUSHFD/POPFD, PUSHA/POPA, PUSHAD/POPAD, XCHG, LAHF, SAHF, IN, OUT, LEA, LDS/LES/LSS/LFS/LGS);(2)算术运算类:ADD, ADC, SUB, SBB, INC, DEC, NEG, XADD, MUL, IMUL, DIV, IDIV, CBW, CWD, CWDE, CDQ, BSWAP, CMP, DAA, DAS, AAA, AAS, AAM, AAD;(3)逻辑运算

编译原理课程设计 C语言编译器的实现

编译原理课程设计报告 设计题目编译代码生成器设计 学生姓名 班级 学号 指导老师 成绩

一、课程设计的目的 编译原理课程兼有很强的理论性和实践性,是计算机专业的一门非常重要的专业基础课程,它在系统软件中占有十分重要的地位,是计算机专业学生的一门主修课。为了让学生能够更好地掌握编译原理的基本理论和编译程序构造的基本方法和技巧,融会贯通本课程所学专业理论知识,提高他们的软件设计能力,特设定该课程的课程设计,通过设计一个简单的PASCAL语言(EL语言)的编译程序,提高学生设计程序的能力,加深对编译理论知识的理解与应用。 二、课程设计的要求 1、明确课程设计任务,复习编译理论知识,查阅复印相关的编译资料。 2、按要求完成课程设计内容,课程设计报告要求文字和图表工整、思路清晰、算法正 确。 3、写出完整的算法框架。 4、编写完整的编译程序。 三、课程设计的内容 课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于编译的知识量较复杂而且综合性较强,因而对一个完整的编译程序不适合平时实验。通过课程设计可以达到综合设计编译程序的目的。本课程的课程设计要求学生编写一个完整的编译程序,包括词法分析器、语法分析器以及实现对简单程序设计语言中的逻辑运算表达式、算术运算表达式、赋值语句、IF语句、While语句以及do…while语句进行编译,并生成中间代码和直接生汇编指令的代码生成器。 四、总体设计方案及详细设计 总体设计方案: 1.总体模块 主程序 词法分析程序语法分析 程序 中间代码 生成程序

2. 表2.1 各种单词符号对应的种别码 单词符号种别码单词符号种别码bgin 1 :17 If 2 := 18 Then 3 < 20 wile 4 <> 21 do 5 <= 22 end 6 > 23 lettet(letter|digit)* 10 >= 24 dight dight* 11 = 25 + 13 ;26 —14 ( 27 * 15 ) 28 / 16 # 0 详细设计: 4.1界面导入设计 (1)一共三个选项: ①choice 1--------cifafenxi ②choice 2--------yufafenxi ③choice 3--------zhongjiandaima (2)界面演示 图一

相关主题
文本预览
相关文档 最新文档