C编译器设计文档.docx
- 文档编号:30637
- 上传时间:2022-10-01
- 格式:DOCX
- 页数:12
- 大小:48.40KB
C编译器设计文档.docx
《C编译器设计文档.docx》由会员分享,可在线阅读,更多相关《C编译器设计文档.docx(12页珍藏版)》请在冰豆网上搜索。
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通过一个CMap
✓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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译器 设计 文档