资源描述:
《编译原理_词法分析器实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一.实验题目和要求。题目:设计PL/0语言的词法分析器。要求:单词(关键字);beginendifthenelsewhilewritereaddocallconstvarprocedurerepeatuntil运算符:+-*/:==<>(#)<<=>>=界符:,.;()标识符:字母打头的字母数字串,长度不超过10.常数:整数,所含数字的个数不超过14.返回单词形式:二元式(种别,属性值)二.实验平台。PC机:WindowsXP操作系统编程环境:TurboC2.0编程语言:C语言三.实验算法说明。定义
2、2个全局变量charch和charstrtoken分别用来存放最新读入的源程序字符和构成单词符号的字符串。然后用各个子函数的功能和读文件内容的操作,实现对源程序的词法分析,分别进行关键字,标识符,常数,运算符和界符的分析确认,然后将对应的二元式结果输出。首先用户输入要读文件的名称,然后程序会把文件的内容读到定义的够大的字符数组str(相当于词法分析的一个缓冲区)里,然后开始从str里一个一个的读出字符并放在专门用来暂时存放单词数组strtoken里进行词法分析,若符合语言的规则,则打印出相关的说明信
3、息,即该字符或字符串的二元式信息,可以清楚的明白该字符的种别和属性值。如果读入的字符或字符串是非法的,即不是语法规定或是没有意义的字符或字符串,程序会提示相关的错误信息并进行一定的说明。四.程序子函数功能说明。1.voidgetChar()将下一个输入字符读到ch中,搜索指示器前移一个字符的位置。2.voidgetBc()检查ch中的字符是否为空白,若是,则调用getChar(),直到ch中进入一个非空的字符。3.voidretract()将搜索指示器回调一个字符位置,将ch置为空白字符。4.voi
4、dconcat()将ch中的字符连接到strtoken之后。5.intIsletter()子函数过程,判断ch中的字符是否为字母。6.intIsdigit()子函数过程,判断ch中的字符是否为数字。7.intIskey_ch()子函数过程,判断strtoken中的字符串是否为程序设计语言的关键字,若是,打印并返回它的二元式。8.voidIsident()子函数过程,判断strtoken中的字符串是否为程序设计语言规定的标识符。9.voidempty()将strtoken字符数组置空,然后接收下一个字
5、符并分析。10.voidIsnum()子函数过程,判断strtoken中的字符串是否为数字串常量,若是,打印并返回它的二元式。11.voiderror()子函数过程,判断ch中的字符是否为非法字符,若是,则打印该非法字符并提示。12.intIsjiefu()子函数过程,判断strtoken中的字符串是否为程序设计语言语法规定的界符。13.intIssuanfu()子函数过程,判断strtoken中的字符串是否为程序设计语言语法规定的运算符号。14.voidreadfile()子函数过程,用户输入要分
6、析的文件名,然后读文件操作,把文件内容读入到字符数组。一.程序源代码(C语言):#include#include#includetypedefcharCH1[15];typedefcharCH2[2];typedefcharNUM[25];CH1key_ch[15]={"begin","end","if","then","else","while","write","read","do","call","const","var","proced
7、ure","repeat","until"};CH1Id[15]={''};//定义数组,存放读出的标识符NUMnum[20];//定义数组,存放读出的常数CH2key1[12]={"+","-","*","/",":=","=","<","<=",">",">=","<>","#"};CH1key1name[12]={"Add","Subtract","Multiple","Devide","Evaluate","Equal","Smaller","Small_equal","Bigger","B
8、igger_equal","Not_equal","Not_equal"};charkey2[5]={',','.',';','(',')'};CH1key2name[5]={"Comma","Period","Semicolon","Lparenthesis","Rparenthesis"};charch;intstr_cur=0;//存放文件数组的指示器intstrt_cur=0;//存放用来分析数组的指示器intid_pi=0;//标识符数组指示器intnum_