- 9
- 0
- 约1.66万字
- 约 22页
- 2020-12-07 发布于天津
- 举报
南华大学
计算机科学与技术学院
课程设计
课程名称:编译原理
题 目:词法分析和算符优先分析
班 级:01班
学 号:20104030113
姓 名:段检妹
2012 年5月24日
设计一:词法分析器
TOC \o 1-5 \h \z 课程设计目的和要求 3
实验目的 3
实验要求 3
设计描述 3
函数模块 4
5.测试样例与测试结果 8
6. 结论 8
设计二: 算符优先语法分析
课程设计的目的和要求 9
课程设计的目的 9
课程设计的要求 9
设计描述 9
自底向上分析方法的描述: 9
算符优先文法的描述: 10
概要设计和详细设计 11
功能结构 11
模块的划分 11
5.源代码 12
5.测试样例与测试结果 22
6. 结论 23
设计一:词法分析器
课程设计目的和要求
1.1实验目的
通过完成词法分析程序,了解词法分析的过程。编制一个读单词过程,从输入的源程序中, 识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。 并依次输出各个单词的内部编码及单词符号自身值。
1.2实验要求
通过词法分析器能够实现以下五种类型如单词等的识别。
关键字begin,end,if,then,else,while,write,read do, call,co nst,char,u ntil,procedure,repeat等
运算符:+,_,*,/,= 等
(3)界符:
(3)界符:
(4)标识符 (5)常量
设计描述
词法分析:逐个读入源程序字符并按照构词规则切分成一系列单词。 单词是语言中具有独立
意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。词法分析是编译过程 中的一个阶段,在语法分析前进行 。也可以和语法分析结合在一起作为一遍,由语法分析
程序调用词法分析程序来获得当前单词供语法分析使用。
表1各种单词符号对应类型表
单词符号
类型编码
助记符
标识符
1
$SYMNOL
常量
2
$CNSTANT
int
3
$INT
if
4
$IF
else
5
$ELSE
while
6
$WHILE
for
7
$FOR
read
8
$READ
write
9
$WRITE
+
10
$ADD
-
11
$SUB
*
12
$MUL
/
13
$DIV
14
$L
=
15
$LE
16
$G
=
17
$GE
!=
18
$NE
==
19
r $e 1
=
20
$ASSIGN
(
21
$LPAR
)
22
: $RPAR 1
J
23
$COM
J
24
$SEM
函数模块
LexAnalyz()函数
实现整个分析的过程
main主函数:
主要实验将输入的字符串存进 token中,和组织其他函数已完成功能。
print()函数
将识别的结果打印出来。
4?设计源码
#in cludestdio.h
#in cludestri ng.h
#in cludectype.h
#in cludecstdlib
using n amespace std;
const char*reserchar[7]={int, if, else, while, for, read, write }; // 关键字 con st char*rememchar[25]={,$SYMBOL, $CNSTANT, $INT, $IF, $ELSE,
$WHILE, $FOR, $READ, $WRITE, $ADD, $SUB,
$MUL, $DIV, $L, $LE, $G, $GE, $NE, $E,
$ASSIGN, $LPAR, $RPAR, $COM, $SEM }; // 助记符 void LexA nalyz();
void Prin t();
char prog[100];
char token[10];
int syn,p;
char ch;
int main()
{
char sym;
Print();
p=0;
do {
ch=getchar();
prog[p++]=ch;
}while( ch!=# );
p=0;
do{
LexAnalyz();
if( syn==-1 )
printf(error\n);
else if( syn!=0 ){
printf(%s %d %s\n, token, syn, rememchar[syn]);
}
// system(pause) ;
}while( syn!=0 );
system(pause);
return 0;
}
void LexAnalyz()
{
int j=0,i=0;
syn=0;
for( i=0; i10; i++)
token[i]
原创力文档

文档评论(0)