已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 实 验 报 告课程名称: 编译原理 专业班级: 信息安全1302班 学 号: 姓 名: 报告日期: 2015年 11 月 11日 计算机科学与技术学院目录1 实验一21.1 实验目的21.2 实验要求21.3 词法分析的算法思想31.4 词法分析代码41.5 结果验证81.6 实验小结92 实验二102.1 实验目的102.2 实验要求102.3 语法分析的算法思想102.4 语法分析代码122.5 结果验证182.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.各种单词符号对应的种别码单词符号 种别码单词符号种别码 begin1:17if2:=18then320while421do523lettet(letter|digit)*10=24dight dight* 11=25+13;26-14(27*15)28/16#01.2.3 词法分析程序的功能输入:所给文法的源程序字符串。输出:二元组(syn,token或sum)构成的序列。其中:syn为单词种别码; token为存放的单词自身字符串; sum为整形常数。1.3 词法分析程序的算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。1. 主程序示意图(1) 关键字表的初值。关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下。char *rwtab6=begin,if,then,while,do,end;置初值调用扫描子程序输出单词二元组输入串结束?结束YN(2) 程序中需要用到的主要变量为syn,token,sum。2. 扫描子程序的算法思想首先设置3个变量:token用来存放构成单词符号的字符串;sum用来存放整型单词;syn用来存放单词符号的种别码。扫描子程序的流程图如下图所示。1.4 词法分析代码#include#includechar prog80,token8,ch;int syn,p,m,n,sum;char *rwtab6=begin,if,then,while,do,end;scaner();main()FILE *fp;fp=fopen(1.txt,r);doch=fgetc(fp);progp+=ch;while(ch!=#);p=0;doscaner();switch(syn)case 11:printf(%-10d%5d)n,sum,syn);break;case -1:printf(you have input a wrong stringn);break;default:printf(%-10s%5d)n,token,syn);break;while(syn!=0);scaner();词法分析程序scaner()sum=0;for(m=0;m8;m+)tokenm+=NULL;ch=progp+;m=0;while(ch= )|(ch=n)ch=progp+;if(ch=a)|(ch=A)while(ch=a)|(ch=A)|(ch=0)tokenm+=ch;ch=progp+;p-;syn=10;for(n=0;n6;n+)if(strcmp(token,rwtabn)=0)syn=n+1;break;else if(ch=0)while(ch=0)sum=sum*10+ch-0;ch=progp+;p-;syn=11;else switch(ch)case :tokenm+=ch; ch=progp+; if(ch=) syn=24; tokenm+=ch; else syn=23; p-; break; case +:tokenm+=ch; ch=progp+;if(ch=+)syn=17;tokenm+=ch;elsesyn=13;p-;break;case -:tokenm+=ch; ch=progp+;if(ch=-)syn=29;tokenm+=ch;elsesyn=14;p-;break;case !:ch=progp+;if(ch=)syn=21;tokenm+=ch;elsesyn=31;p-;break;case =:tokenm+=ch; ch=progp+;if(ch=)syn=25;tokenm+=ch;elsesyn=18;p-;break;case *:syn=15; tokenm+=ch; break;case /:syn=16; tokenm+=ch; break;case (:syn=27; tokenm+=ch; break;case ):syn=28; tokenm+=ch; break;case :syn=5; tokenm+=ch; break;case :syn=6; tokenm+=ch; break;case ;:syn=26; tokenm+=ch; break;case #:syn=0; tokenm+=ch; break;case :syn=17; tokenm+=ch; break;default:syn=-1; break;tokenm+=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 prog100,token8,ch;char *rwtab6=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; FILE *fp; fp=fopen(1.txt,r); do ch=fgetc(fp); progp+=ch; while(ch!=#); p=0; scaner(); parser();parser() if(syn=1) scaner(); yucu(); if(syn=6) scaner(); if(syn=0)&(kk=0) printf(successn); else if(kk!=1)printf(the string havent got a end!n); kk=1; else printf(havent 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;m8;m+)tokenm+=NULL;ch=progp+;m=0;while(ch= )ch=progp+;if(ch=a)|(ch=A)while(ch=a)|(ch=A)|(ch=0)tokenm+=ch;ch=progp+;p-;syn=10;tokenm+=0;for(n=0;n6;n+)if(strcmp(token,rwtabn)=0)syn=n+1;break;else if(ch=0)while(ch=0)sum=sum*10+ch-0;ch=progp+;p-;syn=11;else switch(ch)case ) syn=21; else if(ch=) syn=22; else syn=20; p-; break; case :m=0; ch=progp+; if(ch=) syn=24; else syn=23; p-; break; case :m=0; ch=progp+; 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 实验小结通过做了递归下降分析法的实验,我也走了一遍语法分析器的流程,我明白了递归下降分析法的基本思想是对文法中的每个非终结符编写
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48284-2026航空航天直线式液压作动筒通用规范
- T/ZLJ 007-2023冷冻蜗牛肉
- T/JMBX 0286-2024江门优品 马冈鹅制品
- T/CNCA 121-2025露天煤矿三维地质建模技术要求
- T/CAWAORG 002-2021中国疼痛科专业团体标准
- T/CSMT-DZ 007-2025 T/HZLED 001-2025室外 Mini/Micro LED显示屏通用技术要求
- GB/T 34630.4-2026搅拌摩擦焊铝及铝合金第4部分:焊接工艺规程及评定
- 2025~2026学年广东省深圳市福田区北师大版六年级上册12月课堂素养练习数学试卷【附答案】
- 2026学年江苏省盐城市四年级语文期末高分快速提分卷(详细参考解析)详细答案和解析
- AI大模型棋牌游戏技巧与攻略
- (正式版)DB61∕T 1090-2017 《相变自调温沥青路面材料设计与施工规范》
- 矿山地质环境课件
- 人工智能通识- 课件 第四章 AI赋能工作
- 蛇串疮(带状疱疹)护理查房
- 知识产权法(第二版)张楚课件 第二十八章学习资料
- 2025年广西北部湾国际港务集团有限公司招聘笔试参考题库含答案解析
- 10千伏环网柜(箱)标准化设计方案 (2023 版)
- 经永存左上腔静脉植入CRT-D1例
- 17025实验室管理体系
- 安全文化手册-大唐
- 保密资格评分标准具体操作方法
评论
0/150
提交评论