编译原理实验 词法分析

编译原理实验 词法分析

ID:11173180

大小:86.50 KB

页数:15页

时间:2018-07-10

编译原理实验 词法分析_第1页
编译原理实验 词法分析_第2页
编译原理实验 词法分析_第3页
编译原理实验 词法分析_第4页
编译原理实验 词法分析_第5页
资源描述:

《编译原理实验 词法分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验一简单词法分析器构造(4学时)一实验目的1、掌握正则表达式、有限自动机2、构造简单的词法分析器二词法规则(C语言分析及状态转换图)1、C语言说明C语言有以下记号及单词(1)标识符:以字母或下划线开头的,后跟字母、数字或下划线组成的符号串。(2)保留字:标识符的子集。(3)无符号数:(4)关系运算符:>、<、>=、<=、==、!=(5)标点符号:+、-、*、/、(、)、:、,、;等(6)赋值号:=(7)注释标记:以‘/*’开始,以‘*/’结束。(8)单词符号间的分隔符:空格。2、记号的正规表达式(学生完成)(1)标识符:(2)无符号数:(3)关系运算符:(4)赋值号:(5)标点符号:

2、3、状态转换图为每种记号的文法构造出相应的状态转换图,让这些状态转换图共用一个初态,就可以得到词法分析器的状态转换图,如图1所示。(部分)...图1(a)关系运算符的状态转换图(b)标识符的状态转换图(c)数字的状态转换图三、词法分析器的构造与实现1、词法分析器的算法框图在开始状态,首先要读进一个字符。若读入的是一个空格(包括blank,tab,newline)就跳过它,再继续读字符,直到读进一个非空字符为止。在标识符状态,识别并组合出一个标识符之后,还必须加入一些动作,以便查保留字表,确定识别出的单词符号是保留字,还是用户自定义标识符,并输出相应的记号。在无符号数状态,可识别出各种常

3、数,包括整数在内。在组数的同时,还要做从十进制数到二进制数的转换。.2、程序结构图:ERRORScannerIsAlphaIsnumberIsOtherOUTPUT注:1Scanner功能:完成初始化,并循环调用子模块完成单词的识别2IsAlpha功能:识别保留字和标识符3IsNumber功能:识别数字4IsOther功能:识别其他字符5OutPut功能:输出识别的单词(二元式)6Error功能:出错处理程序代码(略)四.源代码#include"stdafx.h"#include"stdio.h"#include"ctype.h"#include"string.h"#include"c

4、onio.h"#include"stdlib.h"#defineKEYWORD_LEN32#defineSTR_MAX_LEN300#definePRO_MAX_LEN20480#defineSTB_MAX_LEN1000#defineCTB_MAX_LEN1000#defineERROR0#defineID(KEYWORD_LEN+1)#defineCONST(KEYWORD_LEN+2)#defineOPERAT(KEYWORD_LEN+3)#defineDIVIDE(KEYWORD_LEN+4)interrorLine=0;charproBuffer[PRO_MAX_LEN]="

5、";charch;charwordget[STR_MAX_LEN];intpoint=0;charsignTab[STB_MAX_LEN][STR_MAX_LEN];intpointSTB=0;charconstTab[CTB_MAX_LEN][STR_MAX_LEN];intpointCTB=0;charkwTab[KEYWORD_LEN][10]={"auto","break","case","char","const","continue","default","do","double","else","enum","extern","float","for","goto","i

6、f","int","long","register","return","short","signed","sizeof","static","struct","switch","typedef","union","unsigned","void","volatile","while"};charerrorTab[][50]={/*0*/"未知错误",/*1*/"非法的字符",/*2*/"不正确的字符常量表达",/*3*/"不正确的字符串表达",/*4*/"不正确的数字表达",/*5*/"注释丢失'*/'"};typedefstructsignDuality{intkind;intva

7、lue;}*pDualistic,Dualistic;voidpretreatment();voidProcError(intid);boolGetChar();boolGetBC();voidConcat(char*str);intReserve(char*str);voidRetract();intInsertId(char*str);intInsertConst(char*str);boolwordAnalyse(pDualisticpD

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

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

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