编译原理报告(3)
编译原理报告(3) 本文关键词:编译,原理,报告
编译原理报告(3) 本文简介:课程实验报告课程名称:《编译原理》专业:信息安全院系:计算机科学与技术班级:学号:姓名:指导老师:目录实验一词法分析11.1实验目的11.2实验要求11.3词法分析程序的算法思想21.4词法分析程序的具体设计41.5词法实验结果及结果分析7实验二语法分析82.1实验目的82.2实验要求82.3语法分
编译原理报告(3) 本文内容:
课
程
实
验
报
告
课程名称:
《编译原理》
专
业:
信息安全
院
系:
计算机科学与技术
班
级:
学
号:
姓
名:
指导老师:
目录
实验一
词法分析1
1.1实验目的1
1.2实验要求1
1.3词法分析程序的算法思想2
1.4
词法分析程序的具体设计4
1.5词法实验结果及结果分析7
实验二
语法分析8
2.1
实验目的8
2.2
实验要求8
2.3
语法分析程序的算法思想8
2.4
语法分析程序的具体设计11
2.5语法分析程序的结果和结果分析14
总结与感悟16
实验一
词法分析
1.1
实验目的
设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。
1.2
实验要求
1.2.1、待分析的简单的词法
(1)关键字:
begin
if
then
while
do
end
所有的关键字都是小写。
(2)运算符和界符:
:=
+
-
/
>
>=
=
;
(
)
#
(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:
ID
=
letter
(letter
|
digit)*
NUM
=
digit
digit*
(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。
1.2.2、
各种单词符号对应的种别码如表1所示:
表1
各种单词符号对应的种别码
单词符号
种别码
单词符号
种别码
begin
1
:
17
If
2
:=
18
Then
3
21
do
5
23
lettet(letter|digit)*
10
>=
24
dight
dight*
11
=
25
+
13
;
26
—
14
(
27
15
)
28
/
16
#
0
1.2.3、
词法分析程序的功能
输入:所给文法的源程序字符串。
输出:二元组(syn,token或sum)构成的序列。
其中:syn为单词种别码;
token为存放的单词自身字符串;
sum为整型常数。
例如:对源程序begin
x:=9:
if
x>9
then
x:=2*x+1/3;
end
#的源文件,经过词法分析后输出如下序列:
(1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)……
1.3
词法分析程序的算法思想
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。
1.3.1
主程序示意图:
主程序示意图如图1.1所示。其中初始包括以下两个方面:
开始
置初值
调用扫描子程序
输出单词二元组
输入串结束?
否
结束
是
图1.1
词法分析主程序示意图
⑴
关键字表的初值。
关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:
Charrwtab[6]
=
{“begin”,“if”,“then”,“while”,“do”,“end”,};
(2)程序中需要用到的主要变量为syn,token和sum。
首先设置3个变量:①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn用来存放单词符号的种别码。扫描子程序scaner主要部分流程如图1.2所示。
开始
变量初始化
忽略空格
是否文件结束?
否
返回
是
拼数
拼字符串
字母
Syn=11
关键字?
Syn=10
否
是
Syn为对应关键字的种别码
对不同符给出相应的syn值
报错
其他符号
运算符界符等符号
返回
数字
图1.2
词法分析程序流程
1.4
词法分析程序的具体设计
1.4.1
数据结构
单词二元组的结构
typedef
struct
{
int
typenum;//用于存储该字符串的种别码;
charword;
//用于存储字符串;
}
在本次实验中,每一个特定的字符串,相应的输出为其单词种别码和该字符串,所以我按书中的要求设计一个特定的结构保存这两个值,便于程序的编写。
源程序字符缓冲区:input[255]
单词缓冲区:token[255]
源程序字符指针:p_input
单词缓冲区指针:p_token
关键字数组:*rwtab[]={“begin“,“if“,“then“,“while“,“do“,“end“,_KEY_WORD_END}
1.4.2
scaner函数的设计
1)对数字串和标识符的扫描:
设计思想:首先判断第一个输入的字符是否是数字或者是字母,读入下一个字符,判断是否是数字或是字母,如果是连接,并接着读下一个字符,否则回退一个字符,得到的数字串或者标识符,如果是标识符,还需要再进行一次判断,该标识符是否为关节字,最终返回相应的WORD结构。具体的代码实现如下所示:
if(letter())
{
while(letter()||digit())
{
concat();
m_getch();
}
retract();
myword->typenum=reserve();
myword->word=token;
return
myword;
}
else
if(digit())
{
while(digit())
{
concat();
m_getch();
}
retract();
myword->typenum
=11;
myword->word
=token;
return
myword;
}
2)对=,+,-,*等只有一个字符组成的符号进行扫描:
读入一个字符,判断其是否等于相应的符号,如果是返回该字符对应的WORD结构,否则对将该字符与下一个符号比对,直到匹配成功或返回错误为止,具体的代码实现如下所示:
case
=
:
m_getch();
if(ch==
=
)
{
myword->typenum
=29;
myword->word
=“==“;
return
myword;
}
retract();
myword->typenum
=25;
myword->word
=“=“;
return
myword;
break;
case
+
:myword->typenum
=13;
myword->word
=“+“;
return
myword;
break;
case
-
:myword->typenum
=14;
myword->word
=“-“;
return
myword;
break;
……
……
3)对>=
、:=等有两个字符组成的符号的扫描:
以>=为例,首先读入一个字符,判读其是否等于‘>’号,如果相等,再读入一个字符,判断其时候等于‘=’号,如果相等返回‘>=’号对应的WORD结构,否则返回‘>’号对应的word结构,并回退一个字符。如果都不相等,该字符与下一个符号比对,直到匹配成功或返回错误为。具体的代码如下所示。
case
:
:
if(input[p_input]==
=
)
{
myword->typenum
=18;
myword->word
=“:=“;
return
myword;
}
case
>
:
m_getch();
if(ch==
=
)
{
myword->typenum
=24;
myword->word
=“>=“;
return
myword;
}
retract();
myword->typenum
=23;
myword->word
=“>“;
return
myword;
break;
1.5
词法实验结果及结果分析
按课本上的测试数据输入,得到的结果如图1.3所示:
图
1
.3测试结果
分析结果可知,所有的字符扫描得到的结果都符合要求。
实验二
语法分析
2.1
实验目的
编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。
2.2
实验要求
利用C语言编制递归下降分析程序,并对简单语言进行语法分析。
2.2.1、
待分析的简单语言的语法
用扩充的BNF表示如下:
⑴::=beginend
⑵::={;}
⑶::=
⑷::=ID:=
⑸::={+
|
-}
⑹::={*
|
/
⑺::=ID
|
NUM
|
()
2.2.2、
实验要求说明
输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。
例如:
输入
begin
a:=9;
x:=2*3;
b:=a+x
end
#
输出
success!
输入
x:=a+b*c
end
#
输出
error
2.3
语法分析程序的算法思想
(1)主程序示意图如图2.1所示。
图2.1主程序
(2)递归下降分析程序示意图如图2.2所示。
(3)语句串分析过程示意图如图2.3所示。
图2.2
递归下降分析程序示意图
图2.3语句串分析示意图
(4)statement语句分析程序流程如图2.4,2.5,2.6,2.7所示。
图2.4
statement语句分析函数示意图
图2.5
expression表达分析函数示意图
图2.6
term分析函数示意图
图2.7
factor分析过程示意图
2.4
语法分析程序的具体设计
2.4.1数据结构
源程序字符缓冲区:input[100]
单词缓冲区:token[100]
单词缓冲区指针:p_token
关键字数组:char*
key_words[]={“begin“,“if“,“then“,“while“,“do“,“end“}
2.4.2函数的具体设计
1)scaner
函数的设计与词法分析中的设计大致相同,只不过返回值从原来的的WORD结构变成了该存储该字符串的种别码,更加的简单,在此不再赘述。
2)Irparser函数
首先判断是否为begin标示符号,调用scaner函数,调用语句串分析函数,判断是否为end,如果为end,打印成功否则出错。具体函数实现如下所示:
int
lrparser()
{
scaner();
if(syn==1)
{
scaner();
yucu();
if(syn==6)
{
scaner();
if((syn==0)
return
1;
}
}
else
{
if(kk!=1)
printf(“no
end
error/n“);
kk=1;
return
0;
}
}
else
{
printf(“no
begin
error/n“);
kk=1;
return
0;
}
}
3)语句串函数
调用statement函数,并判断时候还有下一条语句,如果有下一条语句,继续调用statement函数。具体的函数实现如下所示:
int
yucu()
{
statement();
while
(syn==29)
{
scaner();
statement();
}
return
1;
}
4)statement函数
首先判断scaner返回的值是否是标识符,是则调用scaner函数,再调用expression函数,否则报错。具体的代码实现如下所示:
int
statement()
{
if(syn==10)
{
scaner();
if
(syn==21)
{
scaner();
expression();
}
else
{printf(“输入赋值错误/n“);kk=1;}
}
else
{printf(“输入语句错误/n“);kk=1;}
return
1;
}
5)expression函数
调用term函数,判断scaner返回的值是否符合表达式的要求,并判断该条表达式是否结束,如果没有结束,继续调用term函数,具体的代码实现如下图所示:
int
expression()
{
term();
while
(syn==13||syn==14)
{
scaner();
term();
}
return
1;
}
6)term函数
调用factor函数,判断scaner返回的值是否符合项的要求,并判断该项是否结束,如果没有结束,继续调用factor函数,具体的代码实现如下图所示:
int
term()
{
factor();
while(syn==15||syn==16)
{
scaner();
factor();
}
return
1;
}
7)factor函数
判断scaner函数的返回值是否符合因子的要求,并调用scaner函数。具体的代码实现如下:
int
factor()
{
if(syn==10||syn==11)
scaner();
else
if(syn==17)
{
scaner();
expression();
if
(syn==18)
{
scaner();
}
else
{
printf(“输入错误/n“);kk=1;return
0;}
}
else
{printf(“输入表达式错误/n“);kk=1;return
0;}
return
1;
}
2.5语法分析程序的结果和结果分析
按照书上的测试输入进行测试,得到的结果如图所示:
同时该程序也能对一些错误进行判断,如图所示:
分析结果可知,本次实验完成了对于正确结果的判断,同时也对一些错误进行判断。
总结与感悟
编译原理是一门研究设计和构造编译程序原理和方法的课程,是计算机各个专业的一门重要专业基础课。对于我们本科生来说尤为重要,总的来说这两次实验分别是词法分析和使用递归下降分析法进行赋值语句的分析,在课本的最后有相应的提示,总的来说不算复杂,跟着课本上的操作一步一步来便可以完成本次实验,虽然简单,但也是对课本知识一个熟悉再实践的过程,经过这次实验,我对所学的编译原理的知识的具体的应用有了一个了解,我们平常生活中使用的如此方便的编译器尽然有这么复杂的设计过程,不得不感叹设计者们巧妙的设计思想。
经过本次实验,我对课本知识有了一个更全面的掌握,同时也锻炼了自己写代码的能力,但同样的,本次实验比较简单,并没有什么挑战性,我实现的代码也比较简单。在以后也会自己尝试去设计一些词法,语法的分析程序,同时也会学着使用yacc等一些工具,争取写出健壮性更强的代码。
17
篇2:编译原理报告(4)
编译原理报告(4) 本文关键词:编译,原理,报告
编译原理报告(4) 本文简介:课程实验报告课程名称:编译原理专业班级:信息安全1302班学号:姓名:报告日期:2015年11月11日计算机科学与技术学院目录1实验一21.1实验目的21.2实验要求21.3词法分析的算法思想31.4词法分析代码41.5结果验证81.6实验小结92实验二102.1实验目的102.2实验要求102.3
编译原理报告(4) 本文内容:
课
程
实
验
报
告
课程名称:
编译原理
专业班级:
信息安全1302班
学
号:
姓
名:
报告日期:
2015年
11
月
11日
计算机科学与技术学院
目录
1
实验一2
1.1
实验目的2
1.2
实验要求2
1.3
词法分析的算法思想3
1.4
词法分析代码4
1.5
结果验证8
1.6
实验小结9
2
实验二10
2.1
实验目的10
2.2
实验要求10
2.3
语法分析的算法思想10
2.4
语法分析代码12
2.5
结果验证18
2.6
实验小结18
实验一
词法分析
1.1
实验目的
设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。
1.2
实验要求
1.2.1
待分析的简单语言的词法
(1)
关键字:
begin
if
then
while
do
end
所有的关键字都是小写。
(2)
运算符和界符:
:
=
+
-
/
>
>=
=
;
(
)
#
(3)
其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:
ID=letter(letter|digit)*
NUM=digit
digit*
(4)
空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。
1.2.2
各种单词符合对应的种别码
表1.各种单词符号对应的种别码
单词符号
种别码
单词符号
种别码
begin
1
:
17
if
2
:=
18
then
3
21
do
5
23
lettet(letter|digit)*
10
>=
24
dight
dight*
11
=
25
+
13
;
26
-
14
(
27
15
)
28
/
16
#
0
1.2.3
词法分析程序的功能
输入:所给文法的源程序字符串。
输出:二元组(syn,token或sum)构成的序列。
其中:syn为单词种别码;
token为存放的单词自身字符串;
sum为整形常数。
1.3
词法分析程序的算法思想
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。
1.
主程序示意图
(1)
关键字表的初值。
关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下。
charrwtab[6]={“begin“,“if“,“then“,“while“,“do“,“end“};
置初值
调用扫描子程序
输出单词二元组
输入串结束?
结束
Y
N
(2)
程序中需要用到的主要变量为syn,token,sum。
2.
扫描子程序的算法思想
首先设置3个变量:token用来存放构成单词符号的字符串;sum用来存放整型单词;syn用来存放单词符号的种别码。
扫描子程序的流程图如下图所示。
1.4
词法分析代码
#include
#include
char
prog[80],token[8],ch;
int
syn,p,m,n,sum;
charrwtab[6]={“begin“,“if“,“then“,“while“,“do“,“end“};
scaner();
main()
{
FILEfp;
fp=fopen(“1.txt“,“r“);
do
{
ch=fgetc(fp);
prog[p++]=ch;
}while(ch!=
#
);
p=0;
do{
scaner();
switch(syn)
{
case
11:printf(“(%-10d%5d)/n“,sum,syn);break;
case
-1:printf(“you
have
input
a
wrong
string/n“);break;
default:printf(“(%-10s%5d)/n“,token,syn);
break;
}
}while(syn!=0);
scaner();
}
词法分析程序
scaner()
{
sum=0;
for(m=0;m=
a
))||((ch=
A
)))
{
while(((ch=
a
))||((ch=
A
))||((ch=
0
)))
{
token[m++]=ch;
ch=prog[p++];
}
p--;
syn=10;
for(n=0;n=
0
))
{
while((ch=
0
))
{
sum=sum*10+ch-
0
;
ch=prog[p++];
}
p--;
syn=11;
}
else
switch(ch)
{
case
:token[m++]=ch;
ch=prog[p++];
if(ch==
=
)
{
syn=24;
token[m++]=ch;
}
else
{
syn=23;
p--;
}
break;
case
+
:token[m++]=ch;
ch=prog[p++];
if(ch==
+
)
{
syn=17;
token[m++]=ch;
}
else
{
syn=13;
p--;
}
break;
case
-
:token[m++]=ch;
ch=prog[p++];
if(ch==
-
)
{
syn=29;
token[m++]=ch;
}
else
{
syn=14;
p--;
}
break;
case
!
:ch=prog[p++];
if(ch==
=
)
{
syn=21;
token[m++]=ch;
}
else
{
syn=31;
p--;
}
break;
case
=
:token[m++]=ch;
ch=prog[p++];
if(ch==
=
)
{
syn=25;
token[m++]=ch;
}
else
{
syn=18;
p--;
}
break;
case
:syn=15;
token[m++]=ch;
break;
case
/
:syn=16;
token[m++]=ch;
break;
case
(
:syn=27;
token[m++]=ch;
break;
case
)
:syn=28;
token[m++]=ch;
break;
case
{
:syn=5;
token[m++]=ch;
break;
case
}
:syn=6;
token[m++]=ch;
break;
case
;
:syn=26;
token[m++]=ch;
break;
case
#
:syn=0;
token[m++]=ch;
break;
case
:
:syn=17;
token[m++]=ch;
break;
default:syn=-1;
break;
}
token[m++]=
/0
;
}
1.5
结果验证
对源程序
begin
x:=9;
if
x
>
0
then
x:=
2*
x
+
1/3;end#的源文件,经词法分析后的结果为:
1.6
实验小结
词法分析的任务是对字符串表示的源程序从左到右地进行扫描和分解,根据语言的词法规则识别出一个一个具有独立意义的单词符号。通过实验,让我更加深刻地体会到了词法分析的原理和过程,通过编写C语言程序,也让我把词法分析的流程自己走了一遍,有了更加清晰的印象。
实验二
语法分析
2.1实验目的
编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。
2.2实验要求
利用C语言编制递归下降分析程序,并对简单语言进行语言分析。
2.2.1
待分析的简单语言的语法
用扩充的BNF表示如下:
(1)
::=beginend
(2)
::={;}
(3)
::=
(4)
::=ID:=
(5)
::={+|-}
(6)
::={*|/}
(7)
::=ID|NUM|()
2.2.2
实验要求说明
输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。
2.3
语法分析程序的算法思想
(1)
主程序示意图
(2)
递归下降分析程序示意图
(3)
语句串分析过程示意图
(4)
statement语句分析函数流程
Statement语句分析函数示意图
expression表达式分析函数示意图
term分析函数示意图
factor分析过程示意图
2.4
语法分析的代码
#include
#include
char
prog[100],token[8],ch;
charrwtab[6]={“begin“,“if“,“then“,“while“,“do“,“end“};
int
syn,p,m,n,sum;
int
kk;
factor();
expression();
yucu();
term();
statement();
parser();
scaner();
main()
{
p=kk=0;
FILEfp;
fp=fopen(“1.txt“,“r“);
do
{
ch=fgetc(fp);
prog[p++]=ch;
}while(ch!=
#
);
p=0;
scaner();
parser();
}
parser()
{
if(syn==1)
{
scaner();
yucu();
if(syn==6)
{
scaner();
if((syn==0)
}
else
{
if(kk!=1)printf(“the
string
haven
t
got
a
end
!/n“);
kk=1;
}
}
else{
printf(“haven
t
got
a
begin
!/n“);
kk=1;
}
return;
}
yucu()
{
statement();
while(syn==26)
{
scaner();
if(syn!=6)
statement();
}
return;
}
statement()
{
if(syn==10)
{
scaner();
if(syn==18)
{
scaner();
expression();
}
else{
printf(“the
sing
:=
is
wrong!/n“);
kk=1;
}
}
else{
printf(“wrong
sentence!/n“);
kk=1;
}
return;
}
expression()
{
term();
while((syn==13)||(syn==14))
{
scaner();
term();
}
return;
}
term()
{
factor();
while((syn==15)||(syn==16))
{
scaner();
factor();
}
return;
}
factor()
{
if((syn==10)||(syn==11))
scaner();
else
if(syn==27)
{
scaner();
expression();
if(syn==28)
scaner();
else{
printf(“the
error
on
(
/n“);
kk=1;
}
}
else{
printf(“the
expression
error!/n“);
kk=1;
}
return;
}
scaner()
{
sum=0;
for(m=0;m=
a
))||((ch=
A
)))
{
while(((ch=
a
))||((ch=
A
))||((ch=
0
)))
{
token[m++]=ch;
ch=prog[p++];
}
p--;
syn=10;
token[m++]=
/0
;
for(n=0;n=
0
))
{
while((ch=
0
))
{
sum=sum*10+ch-
0
;
ch=prog[p++];
}
p--;
syn=11;
}
else
switch(ch)
{
case
)
{
syn=21;
}
else
if(ch==
=
)
{
syn=22;
}
else{
syn=20;
p--;
}
break;
case
>
:m=0;
ch=prog[p++];
if(ch==
=
)
{
syn=24;
}
else
{
syn=23;
p--;
}
break;
case
:
:m=0;
ch=prog[p++];
if(ch==
=
)
{
syn=18;
}
else
{
syn=17;
p--;
}
break;
case
+
:syn=13;break;
case
-
:syn=14;break;
case
:syn=15;break;
case
/
:syn=16;break;
case
(
:syn=27;break;
case
)
:syn=28;break;
case
=
:syn=25;break;
case
;
:syn=26;break;
case
#
:syn=0;break;
case
if
:syn=2;break;
case
then
:syn=3;break;
case
while
:syn=4;break;
case
do
:syn=5;break;
case
end
:syn=6;break;
case
:=
:syn=18;break;
case
:syn=21;break;
case
=
:syn=24;break;
default:syn=-1;break;
}
}
2.5
结果验证
在文件中输入
begin
a:=9;x:=2*3;b:=a+x
end
#
在文件中输入
x:=a+b*c
end
#
在文件中输入
begin
x:=(a+b)*c
#
2.6
实验小结
通过做了递归下降分析法的实验,我也走了一遍语法分析器的流程,我明白了递归下降分析法的基本思想是对文法中的每个非终结符编写一个函数,每个函数的功能是识别由该终结符所表示的语法成分,然后这些函数都以相互递归的方式进行调用,这样的方式非常清晰明了。比如递归下降的分析程序是按这样的顺序进行的,先检查是否是begin若是则调用scaner,不是则进行出错处理,然后进入语句串分析函数,再检查是否end,若否则又进行出错处理,接着再调用scaner,然后再判断syn=0&&kk=0这个条件是否成立,若否则进入出错处理,若是则打印分析成功。后面的子程序流程不再赘述,但是通过这样的顺序,可以让我们很清楚地想明白语法分析是一个怎样的过程,我觉得这是一个很清楚很简洁地方法。
19
篇3:编译原理概念总结
编译原理概念总结 本文关键词:编译,原理,概念
编译原理概念总结 本文简介:第一章引论?为什么要用编译器?与编译器相关的程序?翻译步骤?编译器中的主要数据结构1、语言处理器1、简单的说,一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成一个等价的、用另一种语言(目标语言)编写的程序。2、编译器的重要任务之一就是报告它在翻译过程中发现的源程序
编译原理概念总结 本文内容:
第一章
引论
?
为什么要用编译器
?
与编译器相关的程序
?
翻译步骤
?
编译器中的主要数据结构
1、语言处理器
1、简单的说,一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成一个等价的、用另一种语言(目标语言)编写的程序。
2、编译器的重要任务之一就是报告它在翻译过程中发现的源程序中的错误。
3、使用编译器是为了提高编程的速度和准确度。
4、与编译器相关的程序:解释程序(interpreter)、汇编程序(assembler)、连接程序(linker)、装入程序(loader)、预处理器(preprocessor)、编辑器(editor)、调试程序(debugger)、描述器(profiler)、项目管理程序(project
manager)。
Object
Program
5、解释器是另一种常见的语言处理器。它并不通过翻译的方法生成目标程序。从用户的角度来看,解释器直接利用用户提供的输入执行源程序中指定的操作。
Translator
Loader,Linker
and
Run-time
System
Output
Source
Program
6、一个源程序可能被分割成多个模块,并存放于独立的文件中。把源程序聚合在一起的任务有时会由一个被称为预处理器(preprocessor)的程序独立完成。预处理器还负责把那些称为宏的缩写形式转换为源语言的语句。
7、连接器(linker)能够解决外部内存地址的问题。
8、加载器(loader)把所有的可执行目标文件放到内存中执行。
2、一个编译器的结构
Lexical
Analysis
Syntax
Analysis
Semantic
Analysis
Controlflow/Dataflow
Optimization
Code
Generation
Source
Program
Assembly
Code
Scanner
Parser
High-level
IR
to
low-level
IR
conversion
Build
high-level
IR
Context
Symbol
Table
CFG
Machine
independent
asm
to
machine
dependent
Front
end
Back
end
1、将编译器看成黑盒,则源程序映射为在语义上等价的目标程序,而这个映射由两部分组成:分析部分和综合部分。
2、分析部分把源程序分解成多个组成要素,并在这些要素之上加上语法结构。
3、综合部分根据中间表示和符号表中的信息来构造用户期待的目标程序。
4、编译器的第一个步骤:词法分析(lexical)或扫描(scanning)。词法分析器读入组成源程序的字符流,并且将它们组成有意义的词素(lexeme)的序列。词法分析器产生词法单元(token)。
5、分隔词素的空格会被词法分析器忽略掉。
6、编译器的第二个步骤:语法分析(syntax)或解析(parsing)。语法分析器使用由词法分析器生成的各个词法单元的第一个分量来创建树形的中间表示。
7、语义分析(static
semantic
analysis):语义分析器使用语法树和符号表中的信息来检查源程序是否和语言定义的语义一致。它同时也收集类型信息,并把这些信息存放在语法树或符号表中,以便在随后的中间代码生成过程中使用。语义分析的一个重要部分是类型检查(type
checking)。编译器检查每个运算符是否具有匹配的运算分量。
8、总的说,编译器的翻译步骤是:扫描程序----语法分析程序----语义分析程序----源代码优化程序----代码生成器----目标代码优化程序。
3、编译器结构中的主要数据结构
1、记号(token)
2、语法树(syntax
tree)
3、符号表(symbol
table)
4、常数表(literal
table)
5、中间代码(intermediate
code)
6、临时文件(temporary
file)
4、将编译器分成了只依赖于源语言(前端(
front
end))的操作和只依赖于目
标语言(后端(
back
end))的操作两部分。
第二章
词法分析
?
扫描处理
?
正则表达式
?
有穷自动机
?
从正则表达式到D
FA
?
利用L
e
x自动生成扫描程序
1、
Tokens记号标记:identifiers、keywords、integers、floating-point、symbols、strings、comments
1、
使用正则表达式去描述程序语言tokens
2、
一个正则表达式是归纳确定
3、
一个正则表达式R描述一组字符串集合L(R)
4、
L(R)
=
the
language
defined
by
R
5、
所有的token都能用正则表达式表示
2、
正则表达式:
1、
基本正则表达式:他们是字母比哦啊中的单个字符且自身匹配
2、
正则表达式运算:
1、
从各选择对象中选择,用元字符“|”表示
2、
连结,由并置表示(不用元字符)
3、
重复或“闭包”,由元字符“*”表示
3、从各选择对象中选择:
4、连结:正则表达式r和正则表达式s的连接可写作rs
5、重复:正则表达式的重复有时称为Kleene闭包((Kleene)closure),写作r*
6、运算的优先和括号的使用:前面的内容忽略了选择、连接和重复的优先问题。
7、正则表达式的名字:为较长的正则表达式提供一个简化了的名字很有用处,这样就不再需要在每次使用正则表达式时书写常常的表达式本身了。
3、有穷自动机(有穷状态机):是描述(或“机器”)特定类型算法的数学方法。
1、确定性有穷自动机:下一个状态由当前状态和当前输入字符惟一给出的自动机。
2、非确定性有穷自动机:由它产生的。
4、从正则表达式到DFA
1、构造一个个扫描程序的自动过程可分为3步
2、从正则表达式到NFA
3、从NFA到DFA
4、将DFA中的状态最小化
第三章
上下文无关文法及分析
?
分析过程
?
上下文无关文法
?
上下文无关语言的形式特性
?
分析树与抽象语法树
?
二义性
1、分析过程:
2、上下文无关文法:
3、分析树与抽象语法树:
4、二义性:
可生成带有两个不同分析树的串的文法称作二义性文法(
ambiguous
grammar)
有两个解决二义性的基本方法。
其一是:设置一个规则,该规则可在每个二义性情况下指出哪一个分析树(或语法树)是正确的。
另一种方法是将文法改变成一个强制正确分析树的构造的格式,这样就可以解决二义性了。
第四章
自顶向下的分析
?
使用递归下降分析算法进行自顶向下的分析
?
LL(1)分析
?
First
集合和F
o
l
l
o
w集合
1、使用递归下降分析算法进行自顶向下的分析
2、LL(1)
分析方法是这样得名的:第1个“L”指的是由左向右地处理输入(一些旧式的分析程序惯于自右向左地处理输入,但现在已不常用了)。第2个“L”指的是它为输入串描绘出一个最左推导。括号中的数字1意味着它仅使用输入中的一个符号来预测分析的方向。
3、定义:如果文法G相关的L
L
(
1
)分析表的每个项目中至多只有一个产生式,则该文法
就是L
L
(
1
)文法(LL(1)
grammar)。
- 范文大全
- 职场知识
- 精美散文
- 名著
- 讲坛
- 诗歌
- 礼仪知识
-
超星尔雅学习通《对话大国工匠致敬劳动模范》题库附答案
超星尔雅学习通《对话大国工匠致敬劳动模范》题库附答案 1、历史只会眷顾坚定者、奋进者、搏击者,而不会
【入党申请书】 日期:2021-05-12
-
大学生学习2024年两会精神心得感悟
大学生学习2024年两会精神心得感悟过去一年,是全面贯彻二十大精神的开局之年,中国共产党带领全国各族人民,付出艰辛努力,换来重大成
【心得体会】 日期:2024-03-07
-
对于政治生态考核整改工作方案
本文系作者原创投稿,仅供学习参考,请勿照搬照抄! 关于政治生态考核整改工作的方案 为做好推进风清气正
【经济工作】 日期:2020-06-05
-
中国传统故事英文版 中国古代故事英文版
历史学科蕴含着许多丰富的、生动的、有趣的素材,每一个历史事件、历史人物都有相关的、动人的历史小故事,都能给人以启迪。你对中国古代的故事了解多少呢?下面是小编为您...
【调查报告】 日期:2019-05-22
-
基尔霍夫定律验证实验报告
基尔霍夫定律的验证的实验报告本文关键词:基尔,定律,霍夫,验证,实验基尔霍夫定律的验证的实验报告本文
【思想宣传】 日期:2021-03-08
-
地藏经诵读仪规(完整版)
地藏经诵读仪规(完整版) 恭请文: 恭请大慈大悲大愿地藏王菩萨、护法诸天菩萨慈悲加持护念弟子***能
【个人简历】 日期:2021-03-31
-
中小学党建工作实施意见
中小学党建设工作实施意见中小学校担负着培养德智体美全面发展的社会主义建设者和接班人的重要使命。加强中
【爱国演讲】 日期:2020-09-22
-
青年学生学习全国人大十四届二次会议心得感想16篇
青年学生学习全国人大十四届二次会议心得感想16篇报告中提到政府在经济调控、消费政策、基础设施和制造业投资、房地产调控以及地方债务
【心得体会】 日期:2024-03-07
-
打好科技自立自强的主动仗论文5篇合集
打好科技自立自强的主动仗论文5篇合集 在实现中华民族伟大复兴路上,团结协作是获得最终成功的力量源泉。下面是蒲公英阅读网小编给
【模板范例】 日期:2022-08-05
-
材料力学考题
材料力学考题本文关键词:材料力学,考题材料力学考题本文简介:材料力学1、简易起重设备中,AC杆由两根
【入党申请书】 日期:2021-03-06
-
执行信息公开网
执行信息公开网 执行信息公开网 执行信息公开网: zhi*ing (点击下图可直接进行访问) 全国
【职场知识】 日期:2020-07-03
-
有机磷酸酯类中毒及其解救(实验报告范文)
有机磷酸酯类中毒及其解救XXX、XXX一、实验目的1 观察有机磷酸酯类农药敌百虫中毒时的症状。 2
【职场知识】 日期:2020-08-30
-
年国家开放大学电大电子商务单选题题库
单选: 1、EDI是指A、电子商务B、电子数据交换C、电子交易 D、移动数据交换 答案: B 2、电
【职场知识】 日期:2020-06-05
-
大学教师毕业设计指导记录4篇
大学教师毕业设计指导记录4篇 毕业设计是指工、农、林科高等学校和中等专业学校学生毕业前夕总结性的独立作业。是实践性教学最后一
【职场知识】 日期:2022-05-11
-
“以学生为中心”的教学原则
以学生为中心的教学原则教师在开展以学生为中心的教学实践中,必须谨记学习目标不再是知识的获得,能力要比知识更重要。以下是蒲公英阅读网
【职场知识】 日期:2023-01-05
-
“从青风公司审计案例看销售与收款循环审计”案例说明书
“从青风公司审计案例看销售与收款循环审计”案例说明书一、本案例要解决的关键问
【职场知识】 日期:2020-09-28
-
男一分钟仰卧起坐标准表
表表11--13 男生一分钟仰卧起坐、引体向上单项评分表(单位:次) 等级 单项 得分 三年级 四年
【职场知识】 日期:2021-05-08
-
机械加工创业项目_加工小本创业项目
现在在加工创业项目办小本加工厂有哪些?有什么项目推荐,下面这些小本加工厂项目个个都适合一个人创业,来看看吧!以下是小编分享给大家的关于,一起来看看加工小本创业项目吧!...
【职场知识】 日期:2020-03-19
-
2021教育基础知识试题(附答案)
2021教育基础知识精选试题(附答案) 1、主张恢复西方传统教育核心价值,反对“进步教育
【职场知识】 日期:2021-03-17
-
发展党员工作部门联审征求意见表
发展党员工作部门联审征求意见表发展对象姓 名 性别 出生年月 身份证号 现工作单位及职务 家庭住址
【职场知识】 日期:2020-09-22
-
唐代诗人李昂个人信息
唐代诗人李昂个人信息 导读:我根据大家的需要整理了一份关于《唐代诗人李昂个人信息》的内容,具体内容:
【古典文学】 日期:2020-11-07
-
[关于中秋的朗诵诗词] 关于爱国的朗诵诗词
中秋,热闹的街头树起了灯彩,舞起了火龙。你知道多少关于中秋的朗诵诗词?下面小编为你整理了几篇关于中秋的朗诵诗词,希望对你有帮助。 关于中秋的朗诵诗词一 中秋佳节...
【古典文学】 日期:2019-06-06
-
叠加原理实验报告
一、实验目的1、通过实验来验证线性电路中的叠加原理以及其适用范围。 2、学习直流仪器仪表的测试方法。
【古典文学】 日期:2020-11-12
-
怎样认识世界处于百年未有之大变局
怎样认识世界处于百年未有之大变局 首先,“大变局”是对国际格局发生巨大变迁的
【古典文学】 日期:2020-10-28
-
大气唯美黑板报【国庆节大气黑板报】
日本在投降的那一天,再也没有昔日的嚣张,我们中国的屈辱得到洗刷。下面就随小编看看国庆节大气黑板报内容,希望喜欢哦。 国庆节大气黑板报图片欣赏 国庆节大气黑板报...
【古典文学】 日期:2019-05-05
-
输血查对制度
输血查对制度依据卫生部《临床输血技术规范》的要求,制订抽血交叉配备查对制度、取血查对制度、输血查对制
【古典文学】 日期:2020-09-24
-
【二人旅游英语情景对话】 二人英语对话2分钟旅游
随着国内外旅游业市场的不断扩大,旅游英语人才成为社会的紧缺人才。小编精心收集了二人旅游英语情景对话,供大家欣赏学习! 二人旅游英语情景对话1 A:Itsmyfirsttimeto...
【古典文学】 日期:2020-02-29
-
法律知识手抄报图片大全|法律知识手抄报
我国开展了全面的普法宣传工作,法制宣传教育、普及法律常识作为经常的重要任务。做法制教育手抄报,普及法律知识。下面是小编为大家带来的法律知识手抄报图片大全,希望大家...
【古典文学】 日期:2020-03-10
-
2021公安专业知识考试练习题(附答案)
2021公安专业知识考试练习题(附答案) 1 甲地公安机关接到群众举报,在当天举行的大型娱乐活动中,
【古典文学】 日期:2021-01-29
-
创业思路 [20个创业思路]
在家创业好项目,想创业,不想出门,有没有什么好方法呢?要想兼顾全职的工作,又想挣点外快,我们来看看这些项目。以下是小编为大家整理的关于20个创业思路,给大家作为参考,...
【古典文学】 日期:2020-03-02
-
时尚女装店面装修效果图|韩式女装店面装修
在服装店的设计之中,我们要将多变、创新、品牌自身的定位与发展趋势相结合,用一种可持续的设计方式呈现出来,以便更加适应不断更新的展示主体。下面小编就为大家解开时尚女装店...
【中国文学】 日期:2019-05-16
-
2021年超星尔雅学习通《辩论与修养》章节测试试题(共183题附答案)
2021年超星尔雅学习通《辩论与修养》章节测试试题(共183题附答案)1、辩论的目的不是单纯获得某种
【中国文学】 日期:2021-05-12
-
【世界上最大的半岛】阿拉伯半岛
你知道世界上最大的半岛是什么吗?下面由小编来介绍一下。 阿拉伯半岛的简介 阿拉伯半岛(阿拉伯文:)位于亚洲,是世界上最大的半岛。沙特阿拉伯、也门、阿曼、阿拉伯联合...
【中国文学】 日期:2019-05-24
-
雪天安全行车注意事项_雪天安全行车提示语
维护城市交通秩序,争做河源文明市民。你们想看看雪天安全行车提示语有哪些吗?以下是小编推荐雪天安全行车提示语给大家,欢迎大家阅读! 安全行车温馨提示语【经典篇】 1...
【中国文学】 日期:2020-03-15
-
2022年当前世界下中国面临国际形势论文范本
和平与发展仍然是当今时代的主题。谋和平、求合作、促发展是各国人民的共同愿望。为了大家学习方便,下面是小编为大家整理的当前世界下中国面临的国际形势论文范文内容,以供参...
【中国文学】 日期:2022-03-31
-
信息技术重要性
信息技术的重要性 信息技术与课程整合将带来课程内容的革新,信息技术的高速发展,要求传统的课程必须适应
【中国文学】 日期:2021-02-11
-
小数乘法计算方法
小数乘法得计算方法理解小数乘法计算得法则,能够比较熟练得进行小数乘法笔算与简单得口算重点掌握小数乘法
【中国文学】 日期:2020-12-22
-
古代人物漫画女生唯美图片欣赏 漫画人物图片女孩唯美
中国漫画始于清末民初,而平面设计虽然其名称是在改革开放以后确立的,但设计活动却自古就有,二者的相互影响是本文的主要讨论范围。小编整理了唯美古代女生人物漫画,欢迎阅读!...
【中国文学】 日期:2020-03-19
-
【欧式女装小店面装修图】 女装小店面装修
随着服装行业和照明产业的发展日趋成熟,服装店的照明设计越来越受到人们的广泛关注,即通过光环境设计对消费者产生引导性作用。下面小编就为大家解开欧式女装小店面装修图展...
【中国文学】 日期:2020-02-27
-
清明节踏青简笔画【清明节踏青图片】
清明节是二十四节气之一,是很适合出去踏青的节日,下面是小编为大家收集的清明节踏青图片相关资料,希望对大家有所帮助。 清明节踏青图片欣赏 清明节踏青图片1 清明...
【中国文学】 日期:2019-05-08
-
山东省生产经营单位安全生产主体责任规定(303号令)
山东省生产经营单位安全生产主体责任规定(2013年2月2日山东省人民政府令第260号公布根据2016
【外国名著】 日期:2020-10-22
-
改革开放大事记简表(改革开放新时期1978-2012年)
改革开放大事记简表 (1978-2012年) 时间1978年12月18日至22日地点北京事件党的十一
【外国名著】 日期:2021-06-17
-
大学生音乐欣赏论文 大学音乐鉴赏论文3000
今天小编就为你介绍关于大学生音乐欣赏论文,下面是!小编给你搜集了相关资料!希望可以能帮助到大家。 大学生音乐欣赏论文—第一篇 音乐是生活不可缺少的一部分,学会欣...
【外国名著】 日期:2019-05-27
-
材料力学金属扭转实验报告
材料力学金属扭转实验报告 【实验目的】 1、验证扭转变形公式,测定低碳钢的切变模量G。;测定低碳钢和
【外国名著】 日期:2020-11-27
-
白烛葵的花语:白烛葵的不死幻想症
白烛葵,花名,花语为“不感兴趣”。现又指《知音漫客》上连载漫画《极度分裂》里主要角色之一。下面小编为你整理了白烛葵的花语。欢迎阅读。 白烛葵的花语:不感兴趣 ...
【外国名著】 日期:2019-05-11
-
(新版)就业知识竞赛题库及答案解析
(新版)就业知识竞赛题库(全真题库) 一、单选题1 (单选):在职业生涯规划工具中,组织在展开员工职
【外国名著】 日期:2021-07-21
-
植物装饰画黑白图片欣赏|荷花装饰画黑白图片
装饰画是一种装饰性艺术,是装饰性和创造性相结合的艺术设计形式。小编整理了植物装饰画黑白,欢迎阅读! 植物装饰画黑白图片展示 植物装饰画黑白图片1 植物装饰画黑白...
【外国名著】 日期:2019-05-31
-
长豆角家常做法怎么做好吃营养 炒豆角的家常做法
豆角在我们日常生活中是很常见的食材,可能我们只知道它含有优质蛋白和维生素,其实它还有其他的营养价值。它也是可以和很多食材做搭配的。下面小编为大家整理了长豆角的做法...
【外国名著】 日期:2020-02-26
-
“坚定理想信念、增强历史自觉、弘扬优良传统、加强党性锤炼、党员先锋模范作用发挥”方面存问题和不足剖析材料例文
“坚定理想信念、增强历史自觉、弘扬优良传统、加强党性锤炼、党员先锋模范作用发挥&rdqu
【外国名著】 日期:2021-08-14
-
梦见打官司 [解梦梦见在打官司]
梦见打官司:解梦查询梦见打官司的吉凶,梦见打官司的解梦建议,运势,运气指数等内容,梦见打官司的人都可以来看看。 梦见打官司的周公解梦: 梦见打官司,预示会有意外之财...
【外国名著】 日期:2020-02-26
-
梧桐花的花语|梧桐花的功效与作用
梧桐花为梧桐科植物梧桐的花,植物形态详梧桐子条。今天小编为你整理了梧桐花的花语,欢迎阅读。 梧桐花的花语是:情窦初开 在春季里晚开的花朵,有着恬淡的气息。 ...
【寓言童话】 日期:2020-03-03
-
西部计划笔试题库(99题含答案)
西部计划笔试题库(99题含答案) 1 第十三届全国人大三次会议表决通过了《中华人民共和国民法典》,自
【寓言童话】 日期:2021-06-16
-
大学生音乐欣赏论文 大学音乐鉴赏论文3000
今天小编就为你介绍关于大学生音乐欣赏论文,下面是!小编给你搜集了相关资料!希望可以能帮助到大家。 大学生音乐欣赏论文—第一篇 音乐是生活不可缺少的一部分,学会欣...
【寓言童话】 日期:2020-03-12
-
年学生资助诚信教育主题活动方案
各二级学院(部): 为深入贯彻落实习近平总书记关于教育的重要论述,落实立德树人根本任务,增强当代大学
【寓言童话】 日期:2020-06-21
-
主题教育调查研究工作方案2篇
主题教育调查研究工作方案1根据省、市、县开展“不忘初心、牢记使命”主题教育工
【寓言童话】 日期:2021-03-19
-
油管、套管规格尺寸对照表
API油管规格及尺寸 公称尺寸(in) 不加厚外径(mm) 不加厚内径(mm) 加厚外径(mm) 加
【寓言童话】 日期:2020-08-31
-
惊悚鬼故事50字 令人惊悚的故事
这些惊悚故事在短短的篇幅和时间之内让您感受到故事里传达出来的恐怖感,令你感到害怕。下面就是小编给大家整理的令人惊悚的故事,希望对你有用! 令人惊悚的故事篇1:学校...
【寓言童话】 日期:2019-05-13
-
【古代男生漫画图片大全】男生漫画头像
漫画和动画组成了动漫产业的两大支柱。然而,与动画相比,漫画在业界和学界皆相对冷清。小编整理了古代男生漫画,欢迎阅读! 古代男生漫画图片展示 古代男生漫画图片1 ...
【寓言童话】 日期:2019-05-27
-
北京最好吃的自助餐厅 北京高档自助餐排名
自助餐简直就是拯救大胃王的最佳饮食!没有之一!世界上没有什么事情是吃一顿自助餐解决不了的,如果有,那就吃两顿!下面小编给大家推荐北京几家好吃的自助餐。 北京最好吃的...
【寓言童话】 日期:2020-02-25
-
廉洁自律自我剖析材料(精选)
廉洁自律自我剖析材料((精选多篇)) 信念。科学文化,提高自身素质的终身学习的意识,紧密联系群众,调
【寓言童话】 日期:2020-07-20
-
学生高考动员演讲稿
学生高考动员演讲稿3篇高考动员演讲稿11 老师们、同学们: 大家下午好!漫漫高考长征路已经进入尾声了
【百家讲坛】 日期:2021-09-22
-
企业安全演讲稿2021
最新企业安全的演讲稿5篇 演讲稿是作为在特定的情境中供口语表达使用的文稿。在充满活力,日益开放的今天
【百家讲坛】 日期:2021-09-22
-
XX镇扶贫项目实施专项整治工作总结_1
XX镇扶贫项目实施专项整治工作总结 为深入贯彻精准扶贫精准脱贫基本方略,认真落实党中央、国务院,省委
【百家讲坛】 日期:2021-09-22
-
对乡镇领导班子干部成员批评意见例文
对乡镇领导班子干部成员的批评看法范文 一、对党委书记XXX同志的批评看法〔3条〕 1、与干部交流偏少
【百家讲坛】 日期:2021-09-22
-
群英乡扶贫资金项目芬坡村祖埇村生产道路硬化工程绩效自评报告
群英乡扶贫资金项目((芬坡村祖埇村生产道路硬化工程))绩效自评报告 一、基本情况(一)群英乡扶贫资金
【百家讲坛】 日期:2021-09-22
-
党委书记警示教育大会上讲话2021汇编
党委书记在警示教育大会上的讲话55篇汇编 党委书记在警示教育大会上的讲话(一) 同志们: 根据省州委
【百家讲坛】 日期:2021-09-22
-
对于2021年召开巡视整改专题民主生活会对照检查材料
关于12021年召开巡视整改专题民主生活会对照检查材料 按照中央巡视组要求和省、市、区委统一部署,区
【百家讲坛】 日期:2021-08-14
-
消防安全知识培训试题.doc
消防安全知识培训试题姓名: 部门班组: 成绩: 一:填空题,每空4分,共44分。 1、灭火剂是通过隔
【百家讲坛】 日期:2021-08-14
-
涉疫重点人员“五包一”居家隔离医学观察工作流程
涉疫重点人员“五包一”居家隔离医学观察工作流程 目前,全球疫情仍处于大流行状
【百家讲坛】 日期:2021-08-14
-
疫情防控致全体师生员工及家长一封信
疫情防控致全体师生员工及家长的一封信 各位师生员工及全体家长朋友: 暑假已至,近期我省部分地方发现确
【百家讲坛】 日期:2021-08-14