




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实 验 报 告实验项目名称:用lex构造c子集词法分析器学时:2学时一实验目的和要求用lex构造c子集词法分析器,能实现识别c子集源程序的单词序列。二实验环境 VC/tc dos 三实验过程A:lex使用方法1在“运行“中输入:cmd进入dos环境2 进入LEX所在文件夹。(cd 命令若LEX在f盘根目录下f: cd lex3 LEX使用步骤:(直接在屏幕显示词法分析结果,不保留的)1、编写LEX源程序,如“1.L”,将“1.L”与FLEX.EXE保存在同一文件夹下。2、进入DOS环境FLEX.EXE所在文件夹,运行FLEX.EXE程序。 FLEX 1.L3、运行FLEX后,产生“LEXYY.C”程序4、用VC打开“LEXYY.C”程序,编译后产生“LEXYY.EXE”程序。5、进入DOS环境“LEXYY.EXE”所在文件夹,编写1.c程序,运行“LEXYY.EXE”程序。LEXYY.EXE 1.c 的结果。1.L源程序:实现功能 将所有小写字母转换成大写。%#include %a-z printf(%c,yytext0+A-a);%main( argc, argv ) int argc; char *argv; +argv, -argc; /* skip over program name */ if ( argc 0 ) yyin = fopen( argv0, r );/yyin存放LEXYY的输入源程序 else yyin = stdin; +argv, -argc; /* skip over input name */ if ( argc 0 ) yyout = fopen( argv0, w );/yyout存放LEXYY的输出程序 else yyout = stdout; yylex(); int yywrap() return 1;B:构造c子集词法分析器1、编写c子集的LEX源程序,如“lex.L”,将“lex.L”与FLEX.EXE保存在同一文件夹下。2、运行FLEX.EXE程序。3、运行FLEX后,产生“LEXYY.C”程序4、用VC打开“LEXYY.C”程序,编译后产生“LEXYY.EXE”程序。5、编写一个c子集源程序A.c (每个人的源程序不相同) main() int a;real b; a=2*32;b=3.124;运行“LEXYY.EXE”程序。LEXYY.EXE A.c 看词法分析的结果。四 实验结果 将词法分析的结果抄到实验报告五:错误分析 由于该词法分析程序是分析c子集,case等关键字不能识别,字符型不能识别,部分运算符号和界符不能识别。编写c源程序需注意c子集范围。Lex1.L 源程序:%#include #ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1#endif%digit 0-9number digit+letter a-zA-Zidentifier letter+newline nwhitespace t+%main printf(baoliuzi: %sn, yytext);if printf(baoliuzi: %sn, yytext);else printf(baoliuzi: %sn, yytext);for printf(baoliuzi: %sn, yytext);while printf(baoliuzi: %sn, yytext);do printf(baoliuzi: %sn, yytext);int printf(baoliuzi: %sn, yytext);= printf(yunsuanfu: %sn, yytext);+ printf(yunsuanfu: %sn, yytext);- printf(yunsuanfu: %sn, yytext);* printf(yunsuanfu: %sn, yytext);/ printf(yunsuanfu:%sn, yytext); printf(yunsuanfu: %sn, yytext);( printf(jiefu: %sn, yytext);) printf(jiefu: %sn, yytext); printf(jiefu: %sn, yytext); printf(jiefu: %sn, yytext); printf(jiefu: %sn, yytext); printf(jiefu: %sn, yytext); printf(jiefu: %sn, yytext);: printf(jiefu: %sn, yytext); printf(jiefu: %sn, yytext); printf(yunsuanfu: %sn, yytext);, printf(jiefu: %sn, yytext);= printf(yunsuanfu: %sn, yytext);= printf(yunsuanfu: %sn, yytext); 0 ) yyin = fopen( argv0, r );/yyin存放LEXYY的输入源程序 else yyin = stdin; +argv, -argc; /* skip over input name */ if ( argc 0 ) yyout = fopen( argv0, w );/yyout存放LEXYY的输出程序 else yyout = stdout; yylex(); int yywrap() return 1;思考题:1该源程序中只给出了标识符符定义为字母,如何将规则改为识别字母数字的?2 参照整型变量的定义,怎样将实型变量定义出来?3 完善定义部分。附录:若需要将词法分析器结果作为文件保留起来的,则需要修改程序LEX使用步骤:(需要将词法分析器结果保留起来的)1、编写LEX源程序,如“Cffx.l”,将“Cffx.l”与FLEX.EXE保存在同一文件夹下。2、进入DOS环境FLEX.EXE所在文件夹,运行FLEX.EXE程序。 FLEX cffx.l3、运行FLEX后,产生“LEXYY.C”程序4、用VC打开“LEXYY.C”程序,编译后产生“LEXYY.EXE”程序。5、编写C子集语言源程序,保存为A.TEST,并与“LEXYY.EXE”保存在同一文件夹下。6、进入DOS环境“LEXYY.EXE”所在文件夹,运行“LEXYY.EXE”程序。LEXYY.EXE A.TEST B.TXT7、打开“B.TXT”,看词法分析的结果。Cffx.l源程序:%#include #ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1#endif%digit 0-9number digit+letter a-zA-Zidentifier letter+newline nwhitespace t+%if fprintf(yyout,%s %sn, yytext,yytext);else fprintf(yyout,%s %sn, yytext,yytext);for fprintf(yyout,%s %sn, yytext,yytext);while fprintf(yyout,%s %sn, yytext,yytext);do fprintf(yyout,%s %sn, yytext,yytext);int fprintf(yyout,%s %sn, yytext,yytext);= fprintf(yyout,%s %sn, yytext,yytext);+ fprintf(yyout,%s %sn, yytext,yytext);- fprintf(yyout,%s %sn, yytext,yytext);* fprintf(yyout,%s %sn, yytext,yytext);/ fprintf(yyout,%s %sn, yytext,yytext); fprintf(yyout,%s %sn, yytext,yytext);( fprintf(yyout,%s %sn, yytext,yytext);) fprintf(yyout,%s %sn, yytext,yytext); fprintf(yyout,%s %sn, yytext,yytext); fprintf(yyout,%s %sn, yytext,yytext); fprintf(yyout,%s %sn, yytext,yytext); fprintf(yyout,%s %sn, yytext,yytext); fprintf(yyout,%s %sn, yytext,yytext);: fprintf(yyout,%s %sn, yytext,yytext); fprintf(yyout,%s %sn, yytext,yytext); fprintf(yyout,%s %sn, yytext,yytext);, fprintf(yyout,%s %sn, yytext,yytext);= fprintf(yyout,%s %sn, yytext,yytext);= fprintf(yyout,%s %sn, yytext,yytext); 0 ) yyin = fop
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年地勤机务考试题及答案
- 2025年下半年无人机装调检修工考试试题及答案
- 2025年机务勤务试题及答案
- 2025年东航飞行测试题及答案
- 2025年航空服务员技能认定考试试题及答案解析
- 高校合同模板(3篇)
- 安全用药护理考试题及答案
- 高速公路挡墙施工合同(3篇)
- 电子商务合同法律风险防控与合同签订流程优化
- 专业人士个人房贷转按揭服务合同
- 物业员工安全知识教育培训
- 办公楼装饰装修工程施工组织设计方案
- 《机械制图(多学时)》中职全套教学课件
- 2024年公司内部审计制度例文(四篇)
- 江苏省江阴市河塘中学2024-2025学年七年级上学期10月阶级段性练习语文试题
- 小学英语词汇量小学英语词汇大全(约1000词)(按字母顺序)修改版
- 2024年道路交通(驾驶员交通法规及安全)知识考试题库与答案
- 2024年全国职业院校技能大赛中职(数字产品检测与维护赛项)考试题库(含答案)
- 【乡村旅游探究的文献综述4200字】
- 2025年上半年教师资格考试高中历史学科知识与教学能力试卷与参考答案
- 城市供热管网抢修与维护工程技术规程
评论
0/150
提交评论