c语言编译器的设计
语言编译器的设计
20 10 12 ----2010 12
1 2
3
4 5 6
Windows xp vc6.0
2010121-2010
1220
20101220-2010
1226
[1] ,,.1996
[2] . Linux1999
[3] 1994
[4] [] UNIX 1989
[5] ,,..1997
[6] 2002
[7] 2002
FORTRANPASCALC
一 、引言(或绪论)
FortranPascal
”
12
二、编译器的基础知识
FORTRANPASCALC
. 编译器的发展背景
1
FORTRANPASCALC
IR
ifwhile
.编译器研发的可行性分析
1
2
3
4
1
2
3
(编译过程概述
FORTRANPASCALC
2
/
C
1
1
3
”
12
三、系统需求分析
(词法语法分析简介
.词法需求分析简介
4
1
2
3
4
5
6
rLR 7
.语法需求分析简介
5
Cocke-Younger-Kasami
Early
(4符号
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
的应用
,
,
6
1
2
3
四、系统设计
4(系统设计总体
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图
Read_File()
Get_Next_Token()
Programme()
N
Y
Y
N
7
4.语法分析体流程图
Programme()
Main_Function()
N Const_Declaration()
;
Y
N Var_Declaration()
Y
Y N
Sub_Function()
TABLE ch N
Y
Programme() TABLE
Get_Next_Token()
int 0 A
ch N
8
OPR 0 0
Y
4(语法分析概要设计
CEBNF
<> [<>][<>]
[<>] <(main)> [<>][<>][<>]<>
<>} <> CONST<>{
<> <>=<>
< > [+|-]<>{<>}
<> <><>{<>}
<> int| flaot|double|char <> <>{<>| <>}
<> <>|<>|<>|<>|<>|<>
<> <>=<>
<> <><><>|<>
<> || for[]’[]’[] while’(‘<>’)’<> do’{‘<>’}’while’(‘<>’)’ <> <>[<>]
<> scanf’(‘<>&’<>) <> printf’(‘<><>) <> %d|%c|%s
<> [+|-]<><><>
<> <><><>
<> <>|<>|<>
<> +|-
<> *|/
<> ==|<|<=|>|>=|!= <> if<><>else<>
9
<> a|b||A|B||Z
<> 0|1||9
C
void Error(){…}
main( )
{
Constant;
Variable()
Call_sentence()
Sentence();
}
Constant /**/
{
if(const)
{
Constant_define();
}
}
Constant_define() /**/ {
Identifer
Integer_content(); /**/ }
Variable() /**/
{
if()
}
Sentence() /**/ {
if(!Set_value_sentence())
if(!Condition_sentence())
if(!Circle_sentence())
if(!Call_sentence())
if(!printf)
if(!scanf)
return Error(); }
Set_value_sentence() {
Identifer /**/
Expression/**/
}
Condition () /**/
10
{
Expression
Relation_symbol(); /**/
Expression
}
Circle_sentence() /**/
{
for
while
do-while
}
Call_sentence() /**/ {
Function_Identifer /**/
}
Expression /**/ {
if(+|-)
Item();
Math_ symbol(); /**/
Item();
}
Item() /**/
{
Factor();
Math_ symbol();
Factor();
}
Factor() /**/ {
Identifer
Integer;
If(‘(‘)
Expression;
If(‘)’)
Get_next_word(); }
Math_ symbol() {
if(Math_ symbol())
Get_next_word();
}
Relation_symbol();
{
11
if(Relation_symbol())
Get_next_word();
}
Condition_sentence () /**/
{
if(if){
if(‘(‘)
Expression;
if(‘)’)
Sentence ();
}
if(else)
Sentence (); }
4.4目标代码的分析
, AST
AST ,
,
, NP1AST
23 , 1ASTAST
2AST3
,
, AST
CC++CC++
,
,
,
,
, ,
,
12
,
,
,
,
,
,
,
+ ,
,
,
,
,
,
,
dag,
, dag
, dag , dagdag
, dag
,
dag , 1.
2.
13
, BURSBURS , BURS
, BURSASTAST , BURS
INI
NI
, , BURSFSA
,
, BURS
,
N1N2N1N2
,
,
,
,
*
, ,
,
,
,
,
14
,
,
,
,
,
,
,
,
,
结 论
C
CC
15
16