编译原理课程设计报告词法语法分析器Word文件下载.docx
- 文档编号:18591579
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:17
- 大小:212KB
编译原理课程设计报告词法语法分析器Word文件下载.docx
《编译原理课程设计报告词法语法分析器Word文件下载.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计报告词法语法分析器Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
二元组(syn,token或sum)构成的序列。
词法分析程序可以单独为一个程序;
也可以作为整个编译程序的一个子程序,当需要一个单词时,就调用此法分析子程序返回一个单词.
为便于程序实现,假设每个单词间都有界符或运算符或空格隔开,并引入下面的全局变量及子程序:
1)ch存放最新读进的源程序字符
2)strToken存放构成单词符号的字符串
3)Buffer字符缓冲区
4)structkeyType存放保留字的符号和种别
源程序
输入缓冲区
预处理子程序
扫描缓冲区1
扫描缓冲区2
词法分析子程序
返回一个单词
调用
数据
待分析的简单词法
(1)保留字
break、case、char、const、int、do、while…
(2)运算符和界符
=、+、-、*、/、%、,、;
、(、)、、#
各种单词符号对应的种别码
单词符号
种别码
种别码
ID
sizeof
24
INT
1
static
25
auto
2
struct
26
break
3
switch
27
case
4
typedef
28
char
5
union
29
const
6
unsigned
30
continue
7
void
31
default
8
volatile
32
do
9
while
33
double
10
=
34
else
11
+
35
enum
12
-
36
extern
13
*
37
float
14
/
38
for
15
%
39
goto
16
40
if
17
;
41
int
18
(
42
long
19
)
43
register
20
44
return
21
clear
45
short
22
#
46
signed
23
lettet(letter|digit)*
47
dightdight*
48
状态转换图
6.详细设计(数据结构,子程序)
算法思想:
首先设置3个变量:
①strToken用来存放构成单词符号的字符串;
②ch用来字符;
③structkeyType用来存放单词符号的种别码。
扫描子程序主要部分流程如下图所示。
子程序结构:
子程序名
功能
GETCHAR()
读一个字符到ch中
GETBC()
读一个非空白字符到ch中
CONCAT()
把CHAR中字符连接到strToken之后
LETTER()
判断CHAR中字符是否为字母
DIGIT()
判断ch中字符是否为数字
RESERVE()
用strToken中的字符串查找保留字表,并返回保留字种别码,若返回零,则非保留字
RETRACT()
把CHAR中字符回送到缓冲区
7.程序清单
eyname)==0)
returnKey[i].value;
return0;
}
voidRetract()
alue;
}
elseif(ch>
='
0'
&
ch<
9'
){
ConCat();
GetChar();
while(Digit()){
ConCat();
GetChar();
}
Retract();
strcpy,strToken);
=1;
else{
=Reserve();
returntempkey;
/*
主函数
*/
intmain(){
行结果
E:
/作业/编译原理/
运行结果
九、实验体会
通过本次次法分析设计实验,我加深了对词法分析过程的理解。
并在实际的设计过程深入的了解了编译原理思想。
对编译原理课程有了更深的理解
课程设计二:
设计简单的语法分析器
一、题目
二、设计内容
用算符优先分析方法设计一个分析解释程序,对输入的赋值语句、输出语句、清除语句进行词法分析、语法分析、表达式求值并存储于指定变量中;
若存在错误,提示错误相关信息。
三、设计目的
了解掌握算符优先分析的基本方法、内容;
四、设计环境
五、概要设计
设计思路
语法分析的任务:
把单词符号作为基本单位,分析程序是否为合法的程序.
算符优先分析法是自下而上的语法分析方法,即根据文法,对输入字串进行归约,若能正确地归约为文法的初始符号,则表示输入字串是合法的.主要研究对输入的赋值语句、输出语句、清除语句进行词法分析、语法分析、表达式求值并存储于指定变量中;
文法表示:
S→v=E|E|clear
E→E+T|E-T|T
T→T*F|T/F|F
F→(E)|v|c
单词种别码设计
符号
v
c
N
六、详细设计
变量及函数说明
变量及函数名
表示内容及操作
intpriority[NUM][NUM]
优先关系矩阵
structWordType
单词种别码结构
structVarWord
变量表中的元素结构
mainStack
归约栈
wordStack
单词串
GetwordStack()
输入串转化成单词串
GetWord()
从单词串中取单词
ClearwordStack()、ClearmainStack()
清空单词串和归约栈
CheckvarTable(chara[])
查看变量在变量表中的位置
AddvarTable(VarWorda)
变量表添加变量
InitmainStack()
初始化归约栈
AddmainStack(WordTypea)
归约栈添加
Handle()
归约处理程序
MainHandle()
归约子程序
七、程序清单
eyname)==0)
voidRetract()alue;
boolGetwordStack(){
inti;
=0;
keyTypetemp;
while(strlen(buffer)){
temp=ReturnWord();
ord,;
[].value=10;
elseif==0)ord,;
[].value=9;
else{
for(i=0;
i<
NUM;
i++){
if(strcmp,wordType[i].word)==0)arname)==0)
returni;
elseif(i==M-1)
return-1;
添加变量
voidAddvarTable(VarWorda){
[]=a;
++;
voidInitmainStack()
{
[0]=wordType[12];
=1;
添加归约栈
voidAddmainStack(WordTypea)
归约
boolHandle()
alue==10){
[-1].value=13;
alue==9){
i=CheckvarTable[-1].word);
if(i<
0){
printf("
\n变量%s未定义!
"
[-1].word);
returnfalse;
else
strcpy[-1].word,[i].value);
alue==1){
if[-3].value==9){
i=CheckvarTable[-3].word);
if(i<
VarWordtemp;
strcpy,[-3].word);
strcpy,[-1].word);
=true;
AddvarTable(temp);
}
else
strcpy[i].value,[-1].word);
strcpy[-3].word,[-1].word);
[-3].value=13;
elseif[-3].value==13)
=-2;
alue==3){
inta,b;
a=atoi[-1].word);
b=atoi[-3].word);
a=a+b;
itoa(a,[-3].word,10);
elseif[-2].value==5){
a=a*b;
alue==2&
[-1].value==13&
[-2].value==12){
printf("
\n表达式的值为%s"
=0;
alue==12&
[0].value==12)
returntrue;
boolMainHandle(){
while
if(priority[[-1].value][[0].value]!
=1)
AddmainStack(GetWord());
if{
ord,[i].value);
Handle();
break;
if
MainHandle();
returntrue;
intok=1;
WordTypetemp;
intii=0;
while(ok){
\n"
);
输入第%d语句串:
++ii);
scanf("
%s"
buffer);
单词串:
if(!
GetwordStack())
return0;
for(inti=0;
i++)
(%s,%d)"
[i].word,[i].value);
\n当前归约栈:
InitmainStack();
MainHandle();
printf("
结束\n"
八、运行结果
通过本次语法分析设计实验,我加深了对语法分析过程的理解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 报告 词法 语法 分析器