资源描述:
《词法分析识别五类单词符》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、词法分析识别五类单词符计算机092—07邹芬芬l实验目的设计完成正则文法所描述的Pascal语言子集单词符号的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即关键字、其他标识符、整型常数、运算符、界符五大类。并在文本文件中依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)。l实验要求1)给出各单词符号的类别编码;2)词法分析程序应能发现输入串中的错误;3)词法分析作为单独一遍编写,词法分析结
2、果为二元式序列组成的中间文件;4)设计两个测试用例(尽可能完备),并给出测试结果。l实验设计1)待分析的简单语言的词法(1)关键字:"begin","end","if","then","else","for","do","while","and","or","not"所有的关键字都是小写。(2)运算符和界符:<,<=,<>,=,>,>=,:,:=,/,/*,+,-,*,;,(,),/**/(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:ID=letter(letter
3、digit)*NUM=digitdigit*(4)空格由空白、制表符和换行符组成。空格一
4、般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。92)各种单词符号对应的种别码表1各种单词符号对应的种别码单词符号种别码单词符号种别码begin1<>16end2=17if3>18then4>=19else5:20for6:=21do7/22while8/*23and9+24or10-25not11*26letter(letter
5、digit)*12;27digitdigit*13(28<14)29<=153)词法分析程序的功能输入:所给文法的源程序字符串。输出:二元组(syn,token或sum)构成的序列组成的中间文件。其中:syn为单词种别码;toke
6、n为存放的单词自身字符串;l词法分析程序的算法思想算法的基本任务是从字符串表示的源程序中识别出具体独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。1)主程序示意图主程序示意图如图1所示。其中初值包括如下两个方面:9置初值调用扫描子程序输出单词二元组输入串结束?结束否是图1(1)关键字表的初值。关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:Char*rwtab[11]={"begin",
7、"end","if","then","else","for","do","while","and","or","not"};(2)程序中需要用到的主要变量为syn,TOKEN。2)扫描子程序的算法思想首先设置2个变量:TOKEN用来存放构成单词符号的字符串;syn用来存放单词符号的种别码。l程序测试测试样例1beginx:=9;ifx>0thenx:=2*x+1/3;/*此行为测试程序!*/end#测试结果(‘#’字符用于标示字符串结束):9输出文本:(1,begin)(12,x)(21,:=)(13,9)(27,;)(3,if)(12,x)(18,>)(13,0)(4,then
8、)(12,x)(21,:=)(13,2)(26,*)(12,x)(24,+)(13,1)(22,/)(27,;)(2,end)(0,#)测试样例2begina:=2;b:=1;''&if(a>=b)thena:=3;elsethenb:=2;end#测试结果:输出文本:(1,begin)(12,a)(21,:=)(13,2)(27,;)(12,b)(21,:=)(13,1)(27,;)errorerrorerror(3,if)(28,()(12,a)(19,>=)(12,b)(29,))(4,then)(12,a)(21,:=)(13,3)(27,;)(5,else)(4,the
9、n)(12,b)(21,:=)(13,2)(27,;)(2,end)(0,#)5.心得体会通过这次用C语言对词法分析程序的编制,回顾了C语言的编程方法,加深了对词法分析原理的理解和词法分析的实现过程,掌握了编译程序的实现方法和技术。6.附录源代码#include#include#include#includecharTOKEN[20];/*用来存放单词词文中的各个字符*/9char*rwtab[11]={