编译原理实验报告——词法分析器(内含源代码).docx
《编译原理实验报告——词法分析器(内含源代码).docx》由会员分享,可在线阅读,更多相关《编译原理实验报告——词法分析器(内含源代码).docx(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编译原理实验(一)词法分析器一 实验描述运行环境:vc+2008对某特定语言A ,构造其词法规则。该语言的单词符号包括:1该程序能识别的单词符号及类别说明表单词类别PROGRAM0NOT1BEGIN2IF3END 4THEN5VAR6ELSE7INT8WHILE9AND10DO11OR 12标识符13常数14+15-16(17)18,19;20=2123*24*25=26=27!=282状态转换图3程序流程:词法分析作成一个子程序,由另一个主程序调用,每次调用返回一个单词对应的二元组,输出标识符表、常数表由主程序来完成。二 实验目的通过动手实践,使学生对构造编译系统的基本理论、编译程序的基本结
2、构有更为深入的理解和掌握;使学生掌握编译程序设计的基本方法和步骤;能够设计实现编译系统的重要环节。同时增强编写和调试程序的能力。三 实验任务 编制程序实现要求的功能,并能完成对测试样例程序的分析。四 实验原理char set1000,str500,strtaken20;/set存储代码,strtaken存储当前字符char sign5010,constant5010;/存储标识符和常量定义了一个Analyzer类class Analyzerpublic:Analyzer();/构造函数 Analyzer();/析构函数 int IsLetter(char ch); /判断是否是字母,是则返回
3、1,否则返回 0。int IsDigit(char ch); /判断是否为数字,是则返回 1,否则返回 0。void GetChar(char *ch); /将下一个输入字符读到ch中。void GetBC(char *ch); /检查ch中的字符是否为空白,若是,则调用GetChar直至ch进入一个非空白字符。void Concat(char *strTaken, char *ch); /将ch中的字符连接到strToken之后。int Reserve(char *strTaken); /对strTaken中的字符串查找保留字表,若是一个保留字返回它的数码,否则返回0。void Retrac
4、t(char *ch) ; /将搜索指针器回调一个字符位置,将ch置为空白字符。void input();/向存放输入结果的字符数组输入一句语句。void display();/输出一些程序结束字符显示样式int analyzerSubFun();/词法分析器子程序,为了实现词法分析的主要功能。五 代码实现 / cifa.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#include stdio.h#include string.h#include iostreamusing namespace std;char set1000,str500,strtaken20
5、;/set存储代码,strtaken存储当前字符char sign5010,constant5010;/存储标识符和常量/int Words50010;char ch;/当前读入字符int sr,to=0;/数组str, strtaken 的指针int st=0,dcount=0;int id=0;static int line=1;int h,l;typedef struct Words /*放置二元组*/int num;char letters20;DS; DS Words500; typedef struct words char word20; int type;WORDS;WORDS
6、 words= program,0, not,1, begin,2, end,3, if,4, then,5, var,6, else,7, int,8, while,9, and,10, do,11, or,12, +,15, -,16, (,17, ),18, ,19, ;,20, =,21, ,23, *,24, *,25, =,26, =,27, !=,28 ;typedef struct keytable /*放置关键字*/ char name20; int kind;KEYTABLE;KEYTABLE keyword= /*设置关键字*/ program,0, not,1, beg
7、in,2, end,3, if,4, then,5, var,6, else,7, int,8, while,9, and,10, do,11, or,12, ;void openfile() /*打开文件*/ cout_endl;cout 词法分析器 endl;cout_endl;cout请在本程序根目录下寻找以.txt”为结尾的文件作为词法分析对象,输入文件名endl; FILE *fp; char a,filename10; int n=0; gets(filename); if(fp=fopen(filename,r)=NULL) printf(cannot open file.n);
8、 /exit(0); else while(!feof(fp) /*文件不结束,则循环*/ a=getc(fp); /*getc函数带回一个字符,赋给a*/ setn=a; /*文件的每一个字符都放入set数组中*/ n+; fclose(fp); /*关闭文件*/ setn-1=0;void reflesh() /*清空strtaken数组*/ to=0; /*全局变量to是strtaken的指示器*/ strcpy(strtaken, );void pre1() /*预处理程序*/ int i,a,b,n=0; do if(setn=/ & setn+1=*) a=n; /*记录第一个注释
9、符的位置*/ while(!(setn=* & setn+1=/) if(setn=n) line+; n+; b=n+1; /*记录第二个注释符的位置*/ for(i=a;i=b;i+) /*/ seti= ; /*把注释的内容换成空格,等待第二步预处理*/ else if(setn=/ & setn+1=/) a=n; /*记录第一个注释符的位置*/ while(!setn=n) n+; b=n+1; /*记录第二个注释符的位置*/ for(i=a;i=a & ch=A & ch=0 & ch=9) return(1); else return(0);int Reserve() /*对st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 报告 词法 分析器 内含 源代码
限制150内