河工大版编译原理实验报告
更新时间:2024-04-28 10:20:01 阅读量: 综合文库 文档下载
- 河工大编译原理期末考试推荐度:
- 相关推荐
(此文档为word格式,下载后您可任意编辑修改!)
编
译
原理实验报
学院: 国际教育学院 专业: 中法计算机合作专业 班级: 中法计122 姓名: 徐彤坤 学号: 122930
1 告
目录
实验一 词法分析程序实现........................................................................................................... 3
实验设计:............................................................................................................................... 3 实验步骤................................................................................................................................... 3
基本思路: ....................................................................................................................... 6 程序代码:............................................................................................................................... 6 实验结果分析:..................................................................................................................... 13 自我评鉴................................................................................................................................. 14 实验二 语法分析程序实现......................................................................................................... 15
实验设计:............................................................................................................................. 15 实验步骤................................................................................................................................. 15
基本思路 ......................................................................................................................... 15 程序代码................................................................................................................................. 17 实验结果分析......................................................................................................................... 23
2
实验一 词法分析程序实现
实验设计:
实验目的与要求
通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符流形式的源程序转化为一个由各类单词符号组成的流的词法分析方法。
基本实验题目
题目:试用手工编码方式构造识别以下给定单词的某一语言的词法分析程序。 语言中具有的单词包括五个关键字begin、end、if、then、else;标识符;无符号常数;六种关系运算符;一个赋值符和四个算术运算符。
实验步骤
单词的分类:
构造上述语言中的各类单词符号及其分类码表。 单词符号 begin end if then else 标识符 无符号常数 < <= 类别编码 1 2 3 4 5 6 7 8 9 类别码的助记符 BEGIN END IF THEN ELSE ID UCON LT LE 单词值 字母打头的字母数字串 机内二进制表示 3 = <> > >= := + - * 10 11 12 13 14 15 16 17 18 EQ NE GT GE IS PL MI MU DI 表I 语言中的各类单词符号及其分类码表
图I 识别表I所列语言中的部分单词的DFA及相关的语义过程
图I中所出现的语义变量及语义函数的含义和功能说明如下:
? 函数GETCHAR:每调用一次,就把扫描指示器当前所指示的源程序字符送入字符变量
ch,然后把扫描指示器前推一个字符位置。
? 字符数组TOKEN:用来依次存放一个单词词文中的各个字符。
? 函数CAT:每调用一次,就把当前ch中的字符拼接于TOKEN中所存字符串的右边。 ? 函数LOOKUP:每调用一次,就以TOKEN中的字符串查保留字表,若查到,就将相应关
键字的类别码赋给整型变量c;否则将c置为零。
? 函数RETRACT:每调用一次,就把扫描指示器回退一个字符位置(即退回多读的那个字
符)。
? 函数OUT:一般仅在进入终态时调用此函数,调用的形式为OUT(c,VAL)。其中,实参
c为相应单词的类别码或其助记符;实参VAL为TOKEN(即词文)或为空串。函数OUT的功能是,在送出一个单词的内部表示之后,返回到调用该词法分析程序的那个程序。 需要将程序一中的整常数扩展为无符号常数,以满足题目的要求。描述无符号数的右线性文法G1[<无符号数>]如下:
〈无符号数〉→ d〈余留无符号数〉
4 〈无符号数〉→ ·〈小数部分〉 〈无符号数〉→ d
〈余留无符号数〉→ d〈余留无符号数〉 〈余留无符号数〉→ ·〈十进小数〉 〈余留无符号数〉→ E〈指数部分〉 〈余留无符号数〉→ d 〈余留无符号数〉→ · 〈十进小数〉→ E〈指数部分〉 〈十进小数〉→ d〈十进小数〉 〈十进小数〉→ d
〈小数部分〉→ d〈十进小数〉 〈小数部分〉→ d
〈指数部分〉→ d〈余留整指数〉 〈指数部分〉→ +〈整指数〉 〈指数部分〉→ -〈整指数〉 〈指数部分〉→ d
〈整指数〉→ d〈余留整指数〉 〈整指数〉→ d
〈余留整指数〉→ d〈余留整指数〉 〈余留整指数〉→ d
图II所示为上述文法的状态转换图,其中编号0、1、2、?、6分别代表非终结符号<无符号数>、<余留无符号数>、<十进小数>、<小数部分>、<指数部分>、<整指数>及<余留整指数>。
图II 文法G1[<无符号数>]的状态转换图
表II 包含语义处理过程的识别无符号数的状态矩阵
5
基本思路:
程序代码:
#include TOKEN[0]=ch; ch=fgetc(fp); i=1; while(isdigit(ch)||ch == '.' || ch == 'E'||ch == 'e') { if (ch == '.'){checkdot =1;} else if (ch == 'e'||ch == 'E') { checke = 1; TOKEN[i]=ch; i++; ch=fgetc(fp); if(ch == '+'){TOKEN[i]=ch; i++; ch=fgetc(fp); { TOKEN[i]=ch; i++; ch=fgetc(fp); continue; } } else {TOKEN[i]=ch; 6 e的指数 小数 i++; ch=fgetc(fp); { TOKEN[i]=ch; i++; ch=fgetc(fp); continue; } } *if (ch == '-')TOKEN[i]=ch; i++; ch=fgetc(fp); { TOKEN[i]=ch; i++; ch=fgetc(fp); continue; }* } TOKEN[i]=ch; i++; ch=fgetc(fp); } TOKEN[i]= '\\0'; fseek(fp,-1,1); if(checkdot==1) { out(UCON,TOKEN); } else if (checke == 1) 7 { out(UCON,TOKEN);二进制数 } else { out(INT,TOKEN);整型 } } else { case '<': ch = fgetc(fp); if (ch == '=')out(LE, \else if (ch == '>') out(NE, \else { fseek(fp, -1, 1);TOKEN[i]=ch; switch (ch) 输出 i++; ch=fgetc(fp); } break; out(LT, \ case '=': out(EQ, \ case ':': ch = fgetc(fp); if (ch == '=')out(IS, \ else { fseek(fp,-1,1); report_error( ); } 8 break; case '>': ch = fgetc(fp); if (ch == '=')out(GE, \else { } break; fseek(fp, -1, 1); out(GT, \ case '+':out(PL,\ case '-':out(MI,\ case '*':out(MU,\case '':out(DI,\ case '\\n': break; fseek(fp, -1, 1);report_enter(); break; case '\\r' :out(ENT,\ } ch=fgetc(fp); case ' ': break; case '\\t': break; default: report_error(); break; t=fgetc(fp); } char *KeyWordTable[MAX_KEY_NUMBER] = { \\关键字 int lookup(char *token) { int n = 0; 9 fseek (fp,-1,1); } return; while (strcmp(KeyWordTable[n], KEY_WORD_END)) *strcmp比较两串是 否相同,若相同返回0* { if (!strcmp(KeyWordTable[n], token)) *比较token所指向的关键字和保 留字表中哪个关键字相符* { return n + 1; *根据单词分类码表I,设置正确的关键字类别码,并 返回此类别码的值* } void report_error(){ } void out(int c, char* v){ char* cl = \switch (c) { case case case case case case 1: cl = \ 2: cl = \3: cl = \ printf(\ } return 0; *单词不是关键字,而是标识符* } n++; break; 4: cl = \ 5: cl = \6: cl = \7: cl = \8: cl = \9: cl = \ 10 case case case
正在阅读:
河工大版编译原理实验报告04-28
水资源管理课程11-11
奥地利本科留学条件一览(最新)04-29
春风像个慈祥的母亲11-24
假如我变成一本书作文400字06-29
2013届高考全年复习备考规划05-22
2011年中考思想品德模拟题(三)01-06
武汉大学水力学复习题及答案106-15
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 工大
- 编译
- 原理
- 实验
- 报告
- 环境、职业健康安全合规性评价报告
- 天秤座的男性和狮子座的女性
- 人教版小学语文《狮子和鹿》教案设计2)
- 让都巴惊魂记
- 马克思主义基本原理概论第一章选择题(附答案)
- 生物安全手册检验科
- 中国哲学史 简答题和论述题2
- 基于PLC的汽车自动清洗装置毕业设计 - 图文
- 词性练习题以及答案 (七年级)
- 发生在我们身边的博弈
- 外国近代学前教育
- 全国卷2017-2010理科数学试题及详细答案分类汇编三算法与程序框
- 短信发送流程图形剖析(含编码)Android平台
- 现代化企业对外宣传手册—规章制度
- 权力的定义、起源、性质、利弊
- 2010年高中物理复合场问题分类精析
- 创业创新执行力期末考试尔雅
- 建环实验指导书汇总2011.7.7
- 2013年吉林省政法干警考试行测:并列文段结构性分析(下)
- 初中英语牛津深圳版《九年级全册》Chapter 7 The Phantom of the