词法分析程序+语法语义分析四元式生成+实验报告

词法分析程序+语法语义分析四元式生成+实验报告

ID:47649238

大小:275.01 KB

页数:48页

时间:2020-01-31

词法分析程序+语法语义分析四元式生成+实验报告_第1页
词法分析程序+语法语义分析四元式生成+实验报告_第2页
词法分析程序+语法语义分析四元式生成+实验报告_第3页
词法分析程序+语法语义分析四元式生成+实验报告_第4页
词法分析程序+语法语义分析四元式生成+实验报告_第5页
资源描述:

《词法分析程序+语法语义分析四元式生成+实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、.word可编辑.《编译原理》实验报告本文档集合了编译原理大作业的实验报告加代码实验主要内容为用C++实现了词法分析程序;语法语义以及四元式生成程序代码见附录,复制进VS后程序绝对可编译执行。文档代码为原创,谨慎使用(姚砺的大作业).专业.专注..word可编辑.实验设计一[一、实验名称]词法分析程序[二、实验目的](1)设计一个词法分析程序,每调用一次就从源程序文件中顺序识别出一个单词符号,并返回该单词符号的内部编码、单词符号自身、行列位置信息。(2)要能处理单行注释。[三、实验内容及要求]单词种类与识别规则(1)标识符:首字符为字母或下划线,其后由字母、数字

2、或下划线组成、长度不超过255个字符;.专业.专注..word可编辑.(1)整数:由1到8个数字组成。(2)小数:数字串1.数字串2,其中:数字串1由1-8个数字符组成;数字串2由0-8个数字符组成,即:数字串2可以为空。(3)字符串:由一对“”括起来的符号串,长度不超过255个字符;(4)保留字:if、else、while、do、integer、float、string、input、output、and、or、function、end、def、as、begin(5)数学运算符:+、-、*、/、=(6)比较运算符:<、<=、>、>=、<>、==(7)逻辑运算符:

3、and、or(8)分隔符:{、}、(、)、;、,[四、实验环境]操作系统:Win7/其他编译工具:VC++6.0/CFree/VS2012[五、设计]1设计大体思路将读取的文件采用一遍扫描的方法,即从左到右只扫描一次源程序,将读取的数据存放在一个二维数组里。然后通过扫描函数scan,再从数组中一行一行的读取数据,每调用其依次返回一个单词的类型,同时单词本身以及行列号存放在全局变量中。而说词法分析作为语法分析的一个子程序,故在编写词法分析程序时,将会反复调用scan函数来获取一个个单词信息。.专业.专注..word可编辑..专业.专注..word可编辑.3设计流程

4、图.专业.专注..word可编辑..专业.专注..word可编辑.4函数设计/*词法分析函数*/intscan(strings,intline)框架:{初始化工作是空格直接跳过,知直到读取到一个字符if(是字母){查表判断是否为关键字判断是否为逻辑运算符and或orElse.专业.专注..word可编辑.则为标识符}elseif(是否为数字){判断是整数Else是小数}Else{其余情况判断是否为运算符,字符串等}elseif(getchar==’/’){if(content[line][i+1]=='/')//向前看一个,确定是否为行注释;如果是,则游标指向行

5、末,跳过行注释if(content[line][i+1]=='/*')如果向前看一个发现时块注释则一直向前扫描直到出现“*/”停止,略过块注释如果都不是则Else判断为除号,返回运算符类型}}.专业.专注..word可编辑.2对其中部分实现的说明(1)数字识别while(content[line][i]>='0'&&content[line][i]<='9')//判断是否为数字{text+=content[line][i];i++;flag=1;}if(flag==1){if(content[line][i]=='.'){text+=content[line][

6、i];i++;while(content[line][i]>='0'&&content[line][i]<='9')//判断是否为数字{text+=content[line][i];i++;}return2;//整数}return3;//小数}每读入一个字符,判断是否数字,然后找小数点,找到即为小数.专业.专注..word可编辑.(2)标识符处理while((content[line][i]>=65&&content[line][i]<=90)

7、

8、(content[line][i]>=91&&content[line][i]<=122)

9、

10、content[lin

11、e][i]>='0'&&content[line][i]<='9')//判断是否为数字或者字母或者下划线{text+=content[line][i];i++;}for(j=0;j<=13;j++)if(text==key[j])//查表判断是否为保留字return5;检查到读取的字符为字母时,进行查表判断,找到即说明为关键字(3)空格,注释,行号的处理if(mode==0){if(i

12、源代码文件。.专业.专注

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。