C-编译器设计报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程实验报告

(全日制硕士研究生)

课程名称程序语言与编译

实验名称C-编译器设计

专业、班级计算机科学与技术4班学生张洁坤

学号S********

同组学生及学号无

指导教师杨晓波

目录

第1章实验介绍及整体框架 (3)

1.1实验目的: (3)

1.2实验环境: (3)

1.3 C-编译器的整体框架 (3)

第2章词法分析 (4)

2.1 词法分析包括两个类: (4)

2.2 C关键字表: (5)

2.3 标识符词法: (5)

第3章语法分析 (6)

3.1 Class CParser: (6)

3.2 Grammar: (6)

3.3 基本树形结构: (7)

3.4 支持的语句及运算: (8)

第4章建立符号表 (9)

4.1 辅助类: (9)

4.2 主要的类,建立符号表: (9)

第5章类型检测 (10)

第6章代码生成 (11)

6.1 PCode: (11)

6.2 80X86 ASM: (12)

第7章总结 (13)

参考文献 (15)

第1章实验介绍及整体框架

1.1实验目的:

通过实验,加深对所学的关于程序语言与编译的理论知识的理解,增强对所学知识的综合应用能力。通过本实验,进一步明确编译各阶段之间的关系,掌握词法分析、语法分析、语义分析等实现技术及其实现,熟悉符号表的管理及其在编译过程中的作用,掌握错误处理机制及其应用。

1.2实验环境:

硬件:主机:586以上,配有鼠标,

内存:256MB以上

显示器:VGA或以上

硬盘空间:500MB以上

软件:Microsoft Visual C++ 6.0

1.3 C-编译器的整体框架

输入文件

开始

词法分析语法分析建立符号表类型检查代码生成

结束语法树符号表

第2章词法分析

2.1 词法分析包括两个类:

(1)Class CTokenizer:从一个字符串中(这个把一个文件看作是一个字符串,MFC中CFile->CString)分离出一个一个token,配上简单的类型通过NextToken()返回:

#define TT_EOL '\n'

#define TT_EOF -1

#define TT_INTEGER -2

#define TT_REAL -3

#define TT_WORD -4

#define TT_STRING '"'

#define TT_CHAR '\''

(2)Class CScaner:得到具体的的token类型,定义TokenType如下:

enum TokenType

{

// reserved Keyword

_AUTO, _DOUBLE, _INT, _STRUCT,

_BREAK, _ELSE, _LONG, _SWITCH,

_CASE, _ENUM, _REGISTER, _TYPEDEF,

_CHAR, _EXTERN, _RETURN, _UNION,

_CONST, _FLOAT, _SHORT, _UNSIGNED,

_CONTINUE, _FOR, _SIGNED, _VOID,

_DEFAULT, _GOTO, _SIZEOF, _VOLA TILE,

_DO, _IF, _STATIC, _WHILE,

_READ, _WRITE, _PRINTF,

// operations

ASSIGN, PLUS, MINUS, TIMES, DIV, MOD,

BITWISE_AND, BITWISE_OR, BITWISE_NOT, LOGICAL_NOT, LT, GT,

// interpunctions

LPARAN, RPARAN, LBRACE, RBRACE, LSQUARE, RSQUARE, COMMA, DOT, SEMI, COLON,

// complex operations

EQ/* == */, NEQ/* != */, PLUS_PLUS/* ++ */, MINUS_MINUS/* -- */,

PLUS_ASSIGN/* += */, MINUS_ASSIGN/* -= */, TIMES_ASSIGN/* *= */, DIV_ASSIGN/* /= */,

NGT/* <= */, NLT/* >= */, LOGICAL_AND/* && */, LOGICAL_OR/* || */,

// others

_EOF, _ID, _NUM, _STRING, _CHARACTER, _LABEL, _ERROR, _NONE

};

CScaner通过一个CMap m_KeyIndex 把CString的关键字和TokenType对应,便于查找和反向查找。

2.2 C关键字表:

auto double int struct

break else long switch

case enum register typedef

char extern return union

Const float short unsigned

Continue for signed void

Default goto sizeof volatile

Do if static while

2.3 标识符词法:

identifier :

nondigit

identifier nondigit

identifier digit

nondigit : one of

_ a b c d e f g h i j k l m n o p q r s t u v w x y z

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

digit : one of

0 1 2 3 4 5 6 7 8 9

escape:

\n, \r, \b, \0-7

相关文档
最新文档