




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中国海洋大学实验报告姓名:邓汇星 专业年级:2012级计算机学号:12020031016同组人: 窦猛 专业年级:2012级计算机 学号:12020031020编译原理课程设计实验报告【实验题目】:实验1:用Lex设计词法分析器1【实验目的】:学会用lex设计一个词法分析器。【实验内容】:使用lex为下述文法语言写一个词法分析器。语言文法: PROGRAM ; BEGIN END. VAR ;: | : ; INTEGER | REAL | , | ; | | | := IF THEN ELSE WHILE DO BEGIN END | + | - | * | / | | () | | | | . | . | | =| A | B | | X | Y | Z | a | b | | x | y | z0|1|2|9【实验要求】:输入为用该语言所写的源程序文件;输出为记号序列,每个记号显示为二元组(记号名,记号属性值)的形式。输出可以在屏幕上,也可以输出到文件中。不要求建立符号表。在cygwin下用flex和gcc工具将实验调试通过,并能通过例子parser0中testcases目录下的test1.p测试例的测试。【实验参考】:exam1.l和exam2.l。请认真阅读例子,发现错误及时提出。【实验过程】:根据编译原理实验的exam1.l和exam2.l的代码进行修改,添加对一些符号的定义,设计成为一个新的此法分析器,使得改词法分析器能够对实验要求的记号进行识别,识别效果如下:PROGRAM test;VAR i, j, k: INTEGER; f0: REAL;BEGIN i := 1; j := 1; k := 0; f0 := 3.2; WHILE k=100 DO BEGIN IF j 20 THEN BEGIN j := i; k := k+1; f0 := f0*0.2 END ELSE BEGIN j := k; k := k-2; f0 := f0/.2 END ENDEND.【实验结果截图】;程序用flex和gcc编译调试通过后,以test1.p中的内容座位输入进行词法分析得到以下结果:test1.p的内容如下:PROGRAM test;VAR i, j, k: INTEGER; f0: REAL;BEGIN i := 1; j := 1; k := 0; f0 := 3.2; WHILE k=100 DO BEGIN IF j 20 THEN BEGIN j := i; k := k+1; f0 := f0*0.2 END ELSE BEGIN j := k; k := k-2; f0 := f0/.2 END ENDEND.【实验程序代码】/* 把讨厌的注释去掉 */%#include #define LT1#defineLE2#define GT3#defineGE4#defineEQ5#define NE6#define WHILE18#defineDO19#define ID 20#define NUMBER 21#define RELOP 22#define NEWLINE 23#define ERRORCHAR 24#define _PROGRAM 25#define _VAR 26#define _INTEGER 27#define _REAL 28#define _END 29#define _THEN 30#define fenhao 31#define maohao 32#define douhao 33#define jiahao 34#define chuhao 35#define dian 36#define chenghao 37#define jianhao 38#define _BEGIN 39#define _ELSE 40% delim t nwsdelim+letterA-Za-zdigit0-9idletter(letter|digit)*numberdigit+(.digit+)?(E+-?digit+)?/* 状态(或条件)定义可以定义在这里 * INITIAL是一个默认的状态,不需要定义 */%s COMMENT%/*BEGIN COMMENT;ECHO;*/BEGIN INITIAL;ECHO;.|nECHO; /* ECHO是一个宏,相当于 fprintf(yyout, %s, yytext)*/ws ;whilereturn (WHILE);WHILEreturn(WHILE);do return (DO);ELSEreturn(_ELSE);PROGRAM return (_PROGRAM);BEGINreturn (_BEGIN);VAR return (_VAR);INTEGER return (_INTEGER);END return (_END);REAL return (_REAL);THEN return (_THEN);number return (NUMBER);id return (ID); return (RELOP);= return (RELOP);= return (RELOP); return (RELOP); return (RELOP);= return (RELOP);:= return (RELOP);return (fenhao);, return (douhao);: return (maohao);+ return (jiahao);- return (jianhao);* return (chenghao);/ return (chuhao);. return (dian);. return ERRORCHAR; %int yywrap () return 1;void writeout(int c) switch(c) case ERRORCHAR: fprintf(yyout, (ERRORCHAR, %s) , yytext);break; case RELOP: fprintf(yyout, (RELOP, %s) , yytext);break; case WHILE: fprintf(yyout, (WHILE, %s) , yytext);break; case DO: fprintf(yyout, (DO, %s) , yytext);break; case NUMBER: fprintf(yyout, (NUM, %s) , yytext);break; case ID: fprintf(yyout, (ID, %s) , yytext);break; case NEWLINE: fprintf(yyout, n);break;case _PROGRAM: fprintf(yyout,(PROGRAM);break; case _BEGIN: fprintf(yyout,(BEGIN);break;case _VAR: fprintf(yyout, (VAR), yytext); break;case _INTEGER: fprintf(yyout, (INTEGER), yytext); break;case _REAL: fprintf(yyout, (REAL), yytext); break;case _END: fprintf(yyout, (END), yytext); break;case _THEN: fprintf(yyout, (THEN), yytext); break;case maohao:fprintf(yyout, (maohao), yytext); break;case fenhao: fprintf(yyout, (fenhao), yytext); break;case douhao: fprintf(yyout, (douhao), yytext); break;case jiahao: fprintf(yyout, (jiahao), yytext); break;case chuhao: fprintf(yyout, (chuhao), yytext); break;case dian: fprintf(yyout, (dian), yytext); break;case chenghao: fprintf(yyout, (chenghao), yytext); break;case janhao: fprintf(yyout, (janhao), yytext); break;case _ELSE: fprintf(yyout, (ELSE), yytext); break; default:break; fprintf(yyout, n); return;int main (int argc, char * argv)int c,j=0;if (argc=2) if (yyin = fopen(argv1, r) = NULL) printf(Cant open file %sn, argv1); return 1; if (argc=3) yyout=fopen(argv2, w); while (c = yylex()writeout(c);j+;if (j%5 = 0) writeo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB 10408-2025入侵和紧急报警系统入侵探测器
- 档案智能化管理发展态势试题及答案
- 描述性统计计算能力试题及答案
- 2025中学班车租赁合同范本
- 2025企业融资租赁合同租赁合同范本
- 2025健身房用工的合同范本
- 2025年中考英语冲刺模拟试卷-浙江地区-学生版
- 2025新版施工总承包合同
- 2025【合同范本】建筑工程设备租赁合同范本
- 2025资产转让委托合同范本
- 粮食储备公司工作计划
- GB 31825-2024制浆造纸单位产品能源消耗限额
- Q-SY 05601-2019 油气管道投产前检查规范
- 《金属非金属地下矿山通信联络系统建设规范》
- 浅析船体分段焊接检验
- 医保基金监管培训课件
- 2024高考复习必背英语词汇3500单词
- 3课 《赤壁赋》公开课一等奖创新教学设计【中职专用】高一语文高教版2023-2024-基础模块下册
- 第5章 层次分析法课件
- 情感纠纷案件调解协议书
- 咯血护理疑难病例讨论
评论
0/150
提交评论