编译技术-实验1-词法分析.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译技术-实验1-词法分析

标 准 实 验 报 告(实验)课程名称 编译技术 实 验 报 告学生姓名: 学 号: 指导教师:实验地点: 实验时间:13.10.19一、实验室名称:通用计算机软件实验室 二、实验项目名称:词法分析器三、实验学时:4学时四、实验原理:单词词法分析程序的实现方案五、实验目的:理解词法分析在编译程序中的作用,掌握词法分析的实现方法和技术,以加深对编译技术中词法分析的理解。六、实验内容:用C语言(或C++)对一个简单语言编制一个一遍扫描编译程序,扫描源程序字符,按语言的词法规则识别各类单词(如:语言的保留字、标识符、常数)、符号(如运算符、赋值符等),并将有关字符组合成为单词,完成相关转化和处理,最终以二元式形式输出。其中标识符和无符号整数各作为一类,保留字和符号一符一类。具体实验内容包括:从源程序的第一个字符开始,顺序地读字符,根据所读进的字符识别各类单词;将所识别的单词分类别分别存储到符号表;其中对常数完成数字字符串到数值的转换;删去空格、换行、制表等字符和注释。按要求输出源程序的“单词符号流”,并输出相应符号表的内容,以便检查。实验输出格式要求首先输出 自己姓名、学号;之后输出词法分析结果: 行号 + 词法分析结果二元式, 即: line xx: (单词类别,单词属性) 如果类别是标识符,还需要输出该标识符在符号表中的内容;如果类别是常数,还需要输出该常数的值 ;最后将词法分析结果打印到屏幕并输出到当前目录的 lex.txt 文件 将符号表内容 打印到屏幕并输出到当前目录的 symtab1.txt 文件 将词法错误 打印到屏幕 并 输出到error.txt七、实验器材(设备、元器件):硬件要求:pc机,CPU PII 以上,64M 内存,100M 硬盘空间即可。 软件要求:Windows 7/XP/2003等,包括C编译器的IDE。八、实验步骤、实验编程与运行结果:1.程序编码#include stdio.h#include stdlib.h#include string.h#define true 1#define false 0#define MAX 100#define MAX1 30#define $SYMBOL 1#define $CONSTANT 2#define $ADD 3#define $SUB 4#define $MUL 5#define $DIV 6#define $L 7#define $LE 8#define $G 9#define $GE 10#define $NE 11#define $E 12#define $ASSIGN 13#define $LPAR 14#define $RPAR 15#define $COM 16#define $SEM 17#define $INT 18#define $BEGIN 19#define $FUNCTION 20#define $IF 21#define $THEN 22#define $ELSE 23#define $END 24#define $READ 25#define $WRITE 26FILE *fp_print;FILE *fp_symbol;FILE *fp_error;FILE *fp;typedef struct Eys {char BM[MAX1];int n;}Erys;Erys sym[MAX]={\0},cons[MAX]={\0}; /*定义符号表和常数表*/char token[MAX1],character=\0,ret=\0;int c=0,s=0,t,l=1;void Getchar(){character=fgetc(fp);return ;}void getnbc(){ /*读入非空白字符函数*/ while(character== ||character==\t) Getchar(); return ;}void concat(){ /*连接字符串函数*/token[t]=character;t=t+1;return; }int letter(){ /*判断字母的函数*/if(character=Acharacter=Z)return true; else if(character=acharacter=z) return true;elsereturn false;}int digit(){ /*判断数字的函数*/if (character=0character=9)return true;else

文档评论(0)

mv2323 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档