课程设计任务书

发布 2022-10-06 02:14:28 阅读 8131

枣庄学院。

计算机科学系课程设计任务书。

题目: 一个简单编译器的设计与分析。

学号200812110101

姓名暴学东。

专业计算机科学与技术。

课程: 程序设计语言编译原理。

指导教师: 王艳秋职称: 教师。

完成时间: 2024年 11 月---20 10 年 12 月。

枣庄学院计算机科学系制。

2024年12 月20日。

课程设计任务书及成绩评定。

编译原理》,吕映芝、张素琴、蒋维杜编著,清华大学出版社。

编译原理》,alfred 等,李建中译,机械工业出版社。

课程设计目录:

1、目的。在学习《编译原理》课程过程中,结合各章节的构造编译程序的基本理论。要求用c语言描述及上机调试,实现一个译程序(包括符号表的构造,词法分析,语法分析,中间**产生,优化,目标**生成等重要子程序),将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高软件开发的能力。

2、课程设计的任务。

1)设计符号表。

确定符号表的组织方式,一般应包括名字栏和信息栏,其中名字栏作为关键字。要考虑能够存储有关名字的信息,并可以高效地完成如下操作:

a.查找:根据给定的名字,在符号表中查找其信息。如果该名字在符号表中不存在,则将其加入到符号表中,否则返回指向该名字的指针;

b.删除:从符号表中删除给定名字的表项。

2)设计词法分析器。

设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。功能包括:

a. 具备预处理功能。将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序;

b. 能够拼出语言中的各个单词;

c. 将拼出的标识符填入符号表;

d. 返回(种别码, 属性值)。

e. 3)语法分析与中间**产生器。

要求用**分析法、算符优先分析法、slr分析法,实现对表达式、各种说明语句、控制语句进行语法分析。

若语法正确,则用语法制导翻译法进行语义翻译:对说明语句,要求将说明的各符号记录到相应符号表中;对可执行语句,应产生出四元式中间**并填写到三地址码表中;

若语法错误,要求指出出错性质和出错位置(行号)。出错处理应设计成一个出错处理子程序。

4)优化器。

a. 局部优化:设计出划分基本块的算法,在每一个基本块中实现:

合并已知量、删除多余运算和删除无用赋值三种局部优化。设计构造基本块的dag图的算法,以及将dag图还原实现基本块的优化的算法。

b. 循环优化:只做一重循环优化,完成**外提,强度削弱和删除归纳变量等三种优化。要求实现while循环和for循环语句的优化。

5)目标**生成器。

能完成指定寄存器个数的情况下将一中间**程序段翻译成汇编语言目标**(汇编指令应包括加、减、乘、除),要求指令条数最少的情况下,尽量使用寄存器,尽量少访问内存,这样才能做到运行效率高。

3、样本语言。

样本语言为c语言,其中基本的语句要求必须实现,其余部分可根据自己的实际情况选择实现。

程序**如下:

#if _msc_ver > 1000

#pragma once

#endif //msc_ver > 1000

#define win32_lean_and_mean// exclude rarely-used stuff from windows headers

#include <>

#include

#include

#include

#include

#include <>

using namespace std;

class symbol

public:

int line;

string word;

char group;

symbol();

symbol(const symbol &b);

virtual ~symbol();

operator =(const symbol &b);

string code;

class label

public:

label();

virtual ~label();

string text;

private:

int n;

static int next();

static int _label;

class action

public:

static int lookup(char v,int s);

private:

action();

action();

static int table[54][19];

static string vs;

class goto

public:

static int lookup(char v,int s);

private:

goto();

goto();

static int table[54][9];

static string vs;

class compiler

public:

optimize();

string code;

char nextchar();

preprocess();预处理器。

parser();语法分析器。

symbol *lexer();词法分析器。

void emitter();生成器。

compiler(string cmdline);

virtual ~compiler();

err(int no,int line);

int haserror;//错误发生状态。

private:

int lookup(string m);

char currentchar;

string filename;

int line;//行数状态。

compiler();

int hasfile;//源文件打开状态。

int needoutsuppose;//输出支持状态。

ifstream in;//输入crr文件。

ofstream log;//输出日志文件。

ofstream out;//输出asm文件。

list symbollist;//符号表。

compiler::compiler(string cmdline)

line=1;

haserror=0;

needoutsuppose=0;

hasfile=0;

filename=cmdline;

+ "c_str(),ios::out);

/char c; /测试nextchar()

/do compiler::~compiler()

symbol *compiler::lexer()

char c;

int s=1;

symbol *r;

r=new symbol();

c=currentchar;

while(s)':

case '(

case ')

case '$

s=0;r->word=c;

r->group=c;

r->line=line;

break;

case '/

r->word=c;

s=8;break;

case '#

s=11;break;

default:

s=1;err(1,line);

c=nextchar();

break;

case 2:

if(isalnum(c)||c=='

log<<"语法分析:s->"group='s';

m->line=s1->line;

课程设计任务书

北京理工大学珠海学院。2010 2011 学年第二学期。学生姓名专业班级。指导教师工作部门 机械与车辆学院 一 课程设计题目卧式单面多轴钻孔组合机床动力滑台液压系统。二 课程设计内容。液压传动课程设计一般包括以下内容 1 明确设计要求进行工况分析 2 确定液压系统主要参数 3 拟定液压系统原理图 4...

课程设计任务书

微机原理及应用 学院名称 交通与汽车工程学院课程 专业 车辆工程 汽车电子技术方向年级 2008 级 一 设计题目。1 脉冲计数系统设计。2 手动计数器 s倒计时器设计。4 交通灯控制系统设计。4矩阵式键盘识别技术。6 车速测量及显示。秒马表设计。8 嘀 嘀 报警声设计。9 数字电压表的设计。10 ...

课程设计任务书

附件2 学生姓名专业班级。指导教师工作单位。题目。初始条件 详细资料见设计任务书附件。要求完成的主要任务 包括课程设计工作量及其技术要求,以及说明书撰写等具体要求 1 熟悉全国统一建筑工程预算工程量计算规范,学习应用定额计价模式计算该项目的工程量 土建及装饰 提交建筑工程预算书,填写工程量。2 完成...