编译原理试验-词法分析器的设计与实现0001
更新时间:2023-06-01 15:17:01 阅读量: 实用文档 文档下载
南华大学
计算机科学与技术学院
实验报告
(2018-2019学年度第二学期)
编译原理课程名称词法分析器的设计与实验名称
实现----------------------
姓名学号______________________________
专业班级 ________________________________
地点教师
1. 实验目的及要求
实验目的
加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够釆用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。
实验要求
1.对单词的构词规则有明确的定义;
2.编写的分析程序能够正确识别源程序中的单词符号;
3识别出的单词以v种别码,值〉的形式保存在符号表中,正确设计和维护符号
表;
4.对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误提示,
保证顺利完成整个源程序的词法分析;
2. 实验步骤
1?词法分析规则
V标识符>::二V字母>|<标识符><字母>|V标识符>V数字〉
V常数〉::二V数字>|V数字序列><数字〉
V数字序列〉::= <数字序列〉V数字>|v数字>|<->
V 字母>::=a|b|c|……|x|y|z
v 数字>::二0 山2|3|4|5|6|7|8|9
V运算符〉;:二V关系运算符>|V算术运算符>|V逻辑运算符>|<位运算符〉|V赋值运
算符〉
V 算数运算符>::=+ |-|*|/|,..|-
v 关系运算符 >::=<|>|! = |> = |< = |==
v逻辑运算符〉::二&&||||!
V位运算符 >::二&|||!
V 赋值运算符 >::==| + = |- = |/=|*=
V分界符>::=,|;|(|)|{|}|: |//|/-/
v 保留字 >::=main|if|else|while|do|for|...|void
2?单词符号的编码
26>0main 271>=if 282else< 29while3< =
30do4!
31for!=5
326switch = 33==case7 348 int(
359 double) 36float 10 { 37long} 11 38void 12 ; 39
13
40 114+ =
41||15+ +
42 数16-
43标识17-二4418--,
45&//19 46&&20/**/
#21
*22
23*=
/24
/ 二
25
状态转换图3..
5
=1 丫母与数字空白 非字血与盘字字2 0
1
3其/ 5
/a
+
M H
10
=12
+
13
其14
15
=16
> 其山
19
<其20
21
(&?22
f
算法分析4.①词法分析器工作的第一步是输入源程序文本。为了更好地对单词符号识别,把输入串预处理一下。预处理主要滤掉空格,跳过注释、换行符等。嵌套语句和if-while②对预处理后的输入串依次扫描单个字符,使用语句判断字符的类型,具体识别方法可看状态转换图。有时switch case为了确定词性,需要超前扫描,若超前扫描的字符对识别当前单词无用?
处,则需要退还给输入串,以备识别下一单词字符时使用。
③若读入的字符与单词符号编码表的字符匹配不上,则报错,并输出出错行数。对识别处的单词符号以(单词符号,种别码)二元式的形式输出。
3. 实验内容
1.流程图
2.程序的变量与函数说明(1) in put
全局字符数组,用来存放输入串<2) word
全局字符数组,用来存放获取到的单词符号,限定长度为8
(3)ch
全局字符变量,用来存放最新读入的字符
(4)syn
全局整型变量,表示单词符号的编码
(5)p
全局整型变量,表示当前字符在input数组的位置
< 6)m
全局整型变量, 表示最新读入的字符在word数组的下标
<7) line
全局整型变量,当前行数
(8)keyword
全局字符数组,存放关键字
(9)initO
获取输入串
(10) isKeyQ
判断关键字的函数,若参数数组中是关键字,则把syn置为该关键字对应的编码并返回1,否则返回0
(11) isLetter()
判断字母的函数,若参数字符是字母,则返回1,否则返回0
(12) isDigitO
判断数字的函数,若参数字符是数字,则返回1,否则返回0
< 13) isSpaceQ
判断空白符的函数,若参数字符是空格、TAB或换行符,则返回1,否则返回0
< 14) scanerO
扫描输入串的函数,对读出的字符进行判断,若是单词符号表中的符号,则将syn 置为对应的编码
3.源程序
#include <stdio.h>
#include <string.h〉
char in put [1OOO];// 输入串
char word[8];//获取到的单词
char ch;
int syn〃种别码
int p;
int m;
int line;//行数
〃关键字
char keyword|][8]={main l if,else,while1do, or,switch,case,int.double,
loatjong.void};
void seaner(void);
〃获取输入串
void init()
{
int i=0;
printf(\
please input a string(end with ’#J:\n);
do{
scanf(%c, &ch);
in put[i + +]=ch;
}while(ch !='#');
}
〃判断是不是关键字int isKey(char *str)
int n;
for(n=0;n<13;n + +)
if (strcmp(str, keyword [n])==0)
syn 二n;
return 1;
}
return 0;
}
〃判断是不是数字
int isDigit(char c)
{
if (c>='0,&&c<=,9,)
return 1;
else
return 0;
}
〃判断是不是字母int isLetter(char c)
{
if ((c<='z'&&c>=,a,)||(c>=,A,&&c<=,Z,))
return 1;
else
return 0;
}
int isSpace(char c)
if (c二二J|c二二、f||c二二、nJ
return 1;
}
return 0;
void mainO
{
init();〃输入字符串
lin e=0;
p=o;
do{
scan er();
switch(sy n)
case -1:
printf(you have input a wrong string in line %d\n」ine); break;
default:
printf(( %s,%d )\n,word?syn);
break;
}while(syn!=21);
void seaner(void)
{
〃清空word
for(m=0;m<8;m++)
{
word[m]=
}
//读取字符
ch=i nput[p++];
m=0;
为空格或换行符时,继续往下读〃当ch
if (ch ==,\n,)
lin e++;
} ch 二i nput[p++];
}
while(isSpace(ch))
〃如果以字母开头
if(isLetter(ch))
{
〃如果往后是字母或数字,把字符存入word中,然后往下继续读〃串长超过8则截断
while((isLetter(ch)||isDigit(ch))&&m<8)
{
word[m++]=ch;
ch 二i nput[p++];
p--;
syn 二43;
word[m++]=,\0,;
isKey(word);//判断是不是关键字
}
〃如果是以数字开头,并且往后是数字
else if(isDigit(ch))
{
while((isDigit(ch)||ch =='.1)&&m<8)
word[m++]=ch;
ch 二i nput[p++];
}
则出错〃如果数字之后是字母,if (isLetter(ch)) {
while(!isSpace(ch))
ch 二i nput[p++];
syn 二-1;
return ;
}
p--;
syn 二42;
}
else
{
switch(ch)
〃比较运算符
case V:
word[m++]=ch;
ch=i nput[p++]; if (ch 二二士)
syn=29;
正在阅读:
公共政策视角下的中国人口老龄化07-19
回忆童年作文400字07-08
直映写字教案11-19
湘教版地理七年级上册4.1《天气和气候》省优获奖教案06-28
铁路货车轮规(word版2)05-27
转速电流双闭环直流调速系统设计11-21
秋收时节02-14
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 词法
- 分析器
- 编译
- 原理
- 试验
- 实现
- 设计
- 0001
- 边角后方交会与公路路线测设
- 美国文学史及选读的名词解释(全)
- 建设工程前期手续及文件备案目录
- 基于模块化的自动装配方法
- 综合工时制是否有加班费
- 幼儿园智能监控系统1
- 医院体检中心医技项目量化分析
- 某医院财务管理制度
- 掌柜淘宝客推广技巧汇总
- CAM数控自动编程加工教学研究与实践
- 小学一年级20以内加减法混合运算3000题(每页100题_已排版)
- 2015年小升初英语模拟试卷(5份)
- 初二英语学科试卷
- 2007年高考语文试题及参考答案(安徽卷)
- 有关企业管理的故事-有关企业管理的格言
- 劳动保障用工备案信息管理系统
- 1转变增长方式创新发展理念推进十二五产业用纤维优化发展
- 辛亥革命的历史意义与背景
- 邮政十要、十不准、十必须、十严禁
- 别让风水害了你--装修必知的17条风水禁忌