编译原理词法分析和语法分析报告+代码(C语言版)
更新时间:2023-09-17 18:55:01 阅读量: 幼儿教育 文档下载
信息工程学院
实验 报 告
(2010 ~2011 学年度 第 一 学期 )
课程名称 实验名称
编译原理 词法分析器
姓名:柳冠天 学号:2081908318 班级:083
词法分析
一、实验目的
设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。
二、实验要求
2.1 待分析的简单的词法
(1)关键字:
begin if then while do end 所有的关键字都是小写。 (2)运算符和界符
: = + - * / < <= <> > >= = ; ( ) #
(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:
ID = letter (letter | digit)* NUM = digit digit*
(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。
2.2 各种单词符号对应的种别码:
表2.1 各种单词符号对应的种别码
单词符号 bgin If Then wile do end lettet(letter|digit)* dight dight* + — * / 种别码 1 2 3 4 5 6 10 11 13 14 15 16 单词符号 : := < <> <= > >= = ; ( ) # 种别码 17 18 20 21 22 23 24 25 26 27 28 0 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)??
三、词法分析程序的算法思想:
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 3.1 主程序示意图:
主程序示意图如图3-1所示。其中初始包括以下两个方面:
⑴ 关键字表的初值。
关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:
Char *rwtab[6] = {“begin”, “if”, “then”, “while”, “do”, “end”,};
否
调用扫描子程序 置初值 输出单词二元组 输入串结束 是 结束 图3-1
(2)程序中需要用到的主要变量为syn,token和sum
3.2 扫描子程序的算法思想:
首先设置3个变量:①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn用来存放单词符号的种别码。扫描子程序主要部分流程如图3-2所示。
是 是 是否文件结束?返回 忽略空格 变量初始化
否 字母 数字 其他
拼字符串 运算符、 符号
界符等符号 拼数 否 是否关键字? 是 syn为对应关键字的单词种别码 对不同符号给出相应的syn值 报错 syn=10 syn=11返回 图 3-2
四、词法分析程序的C语言程序源代码:
#include
char prog[80],token[8],ch;
int syn,p,m,n,sum;
char *rwtab[6]={\ scaner(); main() {p=0;
printf(\ do{
scanf(\ prog[p++]=ch; }while(ch!='#'); p=0; do{
scaner(); switch(syn)
{case 11:printf(\ break;
case -1:printf(\ getch(); exit(0);
default: printf(\ break; }
}while(syn!=0); getch(); }
scaner() { sum=0;
for(m=0;m<8;m++)token[m++]=NULL; ch=prog[p++]; m=0;
while((ch==' ')||(ch=='\\n'))ch=prog[p++];
if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))
{ while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))) {token[m++]=ch; ch=prog[p++]; } p--; syn=10; for(n=0;n<6;n++)
if(strcmp(token,rwtab[n])==0) { syn=n+1; break; }
}
else if((ch>='0')&&(ch<='9')) { while((ch>='0')&&(ch<='9')) { sum=sum*10+ch-'0'; ch=prog[p++]; } p--; syn=11; }
else switch(ch)
{ case '<':token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=22; token[m++]=ch; }
else
{ syn=20; p--;
正在阅读:
领导讲话稿之创国卫讲话稿12-02
两句超度的咒语01-24
Citrix教程基础系列--应用虚拟化 XenApp 6.5安装手册05-06
土建内业资料全套范例 - 图文05-09
推荐下载 消防安全演练讲话稿 消防安全演练活动上的讲话-最新03-18
中考名著《水浒传》(71--80回)练习09-19
- 元旦晚会节目单
- 学案
- 光电显示技术期末复习资料 - 图文
- p2p与供应链结合案例
- 2016--2017学年度第二学期五年级班主任工作计划
- 尔雅2017年西藏的历史和文化期末考试满分答案解析
- 智慧树创新工程实践期末考试答案
- 六年级下美术教案-有趣的纸浮雕广西版
- 设备操作规程汇编
- 通信综合实训系统实验报告
- 南京财经大学金融学期末考试简答题
- 现代服务业发展规划研究 - 图文
- 锚杆支护工知识竞赛题
- 实验五
- 债权法习题集及详细解答
- 上海寺庙大全 - 图文
- 机会成本在企业决策中的应用研究
- 高考总复习语文选择题百题精炼第一季专题01 识记现代汉语字音(教师版)
- A9785-B中文资料
- 56m连续梁主墩冷却管布置技术交底
- 词法
- 分析报告
- 编译
- 语法
- 原理
- 语言
- 代码
- 分析
- 机械设计基础习题与讲解 - 图文
- 健康窍门
- 中国石油天然气集团公司物资供应商管理办法
- 2020年《临床助理医师》复习题(九)
- ecshop首页调用团购信息产品购买人数
- 2017年宁夏省河南省教师资格《教师职业道德》归纳试题
- 组织行为学1339842221
- 安徽工业大学 马钢认识实习报告 - 图文
- 语文A版小学六年级下册全册教案
- 机组启动时对水汽品质把关不严是产生
- 全市庆祝建国68周年大合唱比赛活动方案
- 如何通过“后果”强化员工行为(满分试题答案)
- 米跨梯形屋架设计例题
- 2016安徽省公务员面试真题及分解
- 8、三水城际供电车间 施工、维修天窗作业管理制度及安全卡控措施
- 全面质量管理基本内容 - 图文
- 黄冈市人民政府关于全市交通基础设施灾后恢复重建工作的指导意见
- 读故事20天搞定英语考研单词
- 《 船 模 性 能 实 验》实 验 报 告
- Microsoft(windows+office)20160624 启用码