C编译器设计文档.docx

上传人:b****1 文档编号:30637 上传时间:2022-10-01 格式:DOCX 页数:12 大小:48.40KB
下载 相关 举报
C编译器设计文档.docx_第1页
第1页 / 共12页
C编译器设计文档.docx_第2页
第2页 / 共12页
C编译器设计文档.docx_第3页
第3页 / 共12页
C编译器设计文档.docx_第4页
第4页 / 共12页
C编译器设计文档.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C编译器设计文档.docx

《C编译器设计文档.docx》由会员分享,可在线阅读,更多相关《C编译器设计文档.docx(12页珍藏版)》请在冰豆网上搜索。

C编译器设计文档.docx

C编译器设计文档

C-编译器设计文档

 

CS0106

3011112192

陆晓春

 

目录

 

Ø整体框架…………………………………………………………………………………….3

Ø词法分析…………………………………………………………………………………….3

✓ClassCTokenizer……………………………………………………………………3

✓ClassCScaner………………………………………………………………………..3

✓C关键字表……………………………………………………………………………..4

✓标识符词法……………………………………………………………………………..4

Ø语法分析……………………………………………………………………………………..5

✓ClassCParser………………………………………………………………………..5

✓Grammar……………………………………………………………………………..5

✓基本树形结构..……………………………………………………………………….6

✓支持的语句及运算..………………………………………………………………….7

Ø建立符号表………………………………………………………………………………….7

✓ClassLineListRec…………………………………………………………………..7

✓ClassBucketListRec……………………………………………………………….7

✓ClassCSymbolTable……………………………………………………………….8

✓ClassCFunArgsCheck……………………………………………………………..8

Ø类型检测……………………………………………………………………………………8

✓ClassCAnalyzer..…………………………………………………………………..8

✓类型匹配………………………………………………………………………………8

✓函数调用参数检测……………………………………………………………………8

Ø代码生成……………………………………………………………………………………8

✓PCode…………………………………………………………………………………8

✓80X86ASM………………………………………………………………….……….9

Ø总结…………………………………………………………………………………………9

 

Ø整体框架:

 

Ø词法分析:

包括两个类:

✓ClassCTokenizer:

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

#defineTT_EOL'\n'

#defineTT_EOF-1

#defineTT_INTEGER-2

#defineTT_REAL-3

#defineTT_WORD-4

#defineTT_STRING'"'

#defineTT_CHAR'\''

✓ClassCScaner:

得到具体的的token类型,定义TokenType如下:

enumTokenType

{

//reservedKeyword

_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,

_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,

//complexoperations

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通过一个CMapm_KeyIndex把CString的关键字和TokenType对应,便于查找和反向查找。

✓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

✓标识符词法:

identifier:

nondigit

identifiernondigit

identifierdigit

nondigit:

oneof

_abcdefghijklmnopqrstuvwxyz

ABCDEFGHIJKLMNOPQRSTUVWXYZ

digit:

oneof

0123456789

escape:

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

Ø语法分析:

✓ClassCParser:

定义CTreeNode,和Tiny例程类似:

#defineMAX_CHILDREN3

classCTreeNode

{

public:

CTreeNode*child[MAX_CHILDREN];//pointtochildnode

CTreeNode*father;//pointtofathernode

CTreeNode*sibling;//pointtosiblingnode

intlineno;

NodeKindnodekind;

union{

StmtKindstmt;

ExpKindexp;

}kind;

enumTokenTypetype;

CStringszName;

CStringszScope;//nodefunctionscope

BOOLbArray;//isthisanarraydeclaration

intiArraySize;//arraysize

};

通过文法及相应规则建立语法树。

✓Grammar:

1.program->declaration_list

2.declaration_list->declaration_listdeclaration|declaration

3.declaration->var_declaration|fun_declaration

4.var_declaration->type_specifierID(,...)`;`|type_specifierID`[`NUM`]`(,...)`;`

5.type_specifier->`int`|`void`|`char`,actuallythisstepisindeclaration_list()

6.fun_declaration->type_specifierID`(`params`)`compound_stmt

7.params->param_list|`void`|empty,`void`isthoughtasempty

8.param_list->param_list`,`param|param

9.param->type_specifierID|type_specifierID`[``]`

10.compound_stmt->`{`loal_declarationsstatement_list`}`|expression_stmt

11.local_declarations->local_declarationsvar_declaration|var_declaration

12.`read``(`var`)``;`

13.`write``(`expression`)``;`

14.`printf``(``"`STRING`"``)``;`

15.expression_stmt->expression`;`|`;`

16.expression->var`=`expression|logic1_expression

17.logic1_expression->logic1_expression`||`logic2_expression|logic2_expression

18.logic2_expression->logic2_expression`&&`simple_expression|simple_expression

19.simple_expression->additive_expressionrelopadditive_expression|additive_expression

20.relop->`<=`|`<`|`>`|`>=`|`==`|`!

=`

21.additive_expression->additive_expressionaddopterm|term

22.addop->`+`|`-`

23.term->termmuloplogic3_expression|logic3_expression

24.mulop->`*`|`/`|`%`

25.logic3_e

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1