C语言词法分析器.doc

C语言词法分析器.doc

ID:56277809

大小:97.00 KB

页数:16页

时间:2020-06-05

C语言词法分析器.doc_第1页
C语言词法分析器.doc_第2页
C语言词法分析器.doc_第3页
C语言词法分析器.doc_第4页
C语言词法分析器.doc_第5页
资源描述:

《C语言词法分析器.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.实验目的及要求1、目的通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。2、要求l根据具体情况,由同学们自己选取C语言的一个适当大小的子集(可取一类典型单词,也可以尽可能使各种类型的单词都兼顾到);在实习前一定要制出相应的表。l实验时间:4-8学时l检查内容及时间:A)完整的实验报告。B)在机器上调试成功的源程序。3、软件、硬件环境lVisualstudio2010,Windows7操作系统l计算机一台2.实验步骤l分析对于单词符号我们将其

2、分成四类:保留字K、标识符I、常数C和界符P,每类单词符号均可使用一张表格表示.在词法分析过程中,保留字K和界符P这两个表格的内容是固定不变的(由语言确定),源程序字符串只能从其中选取,而标识符I、常数C这两表是在分析过程中不断形成的.  对于一个具体源程序而言,在扫描字符串时识别出一个单词,若这个单词的类型是K、I、C或P中之一,那么就以单词的二元式形式输出.每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直到整个源程序全部扫描完毕,从而形成相应的单词串.  各类单词的二元式表述均具有相同的结构与长度,形式如下:(单词种别

3、t,单词自身的值i)t是单词种别,而单词种别共分为K、I、C、P四类且每类对应一张表格.因此,t实际上就是一个指向这四类中某一类对应表格的指针.i则为指向该类表格中一个特定项目的指针.  所以整个的词法分析过程就是从源程序中获得一个个的单词符号,将这些符号分别填入四张类表中,并且有一个二元式序列构成一个索引,这个索引为以后的语法分析提供处理上的方便.  为了减少实习量,可以适量地选取K,P中的一个子集来进行.如下表:表1 保留字K表内部地址12345678910保留字forwhileDOELSE IFSTATICINTSIZEOFBREA

4、KCONTINUE表2 界符P表内部地址123456789101112131415161718+-*/<<=>>=!====(),:;{}界 符表3单词符号的编码单词符号类别编码标识符1常数2保留字3+4-5*6/7<8<=9>10>=11!=12==13=14(15)16,17:18;19{20}21保留字表包括10个有代表性的保留字,界符表包括关系运算符,算术运算符,分隔符三种,一对圆括号,加上赋值号,花括号,分号,引号.这两表的内容表明C语言的条件语句,赋值语句,WHILE型循环语句,复合语句,过程及变量说明均可作为源程序例子输入给

5、词法分析程序,标识符表I中的每一项包含一个标识符,常数表C中的每一项包含一个整常数,后两表的内容都是在词法分析过程中产生的.  如何从源程序中识别出一个个的单词符号呢?图1中的流图清晰地反映出这一过程.图1中,双圆圈的状态表示终态,即能到达终态就代表识别出一个单词符号,而带有*号的终态是指处理时应回退一字符.l算法词法分析器在扫描过程中,依次从源程序中取出源字符,根据图1的扫描过程状态转换图,当碰到终态时,即双圆圈的状态时就得到一个单词符号,此时可以根据第一个字符判断单词属于K,I,C,P中哪一个类,从而确定单词的“单词种别”和“单词自身

6、的值”。2字母非字母与数字1字母与数字0空白4数字非数字3数字+6;58:非=7=9(10,11)12其它1714<非=1315>16=图1 扫描程序的状态转换图说明:这个图只是大概表达一个词法分析的思路,由于不知道加入,所以并不完全准确。1.实验内容流程图、程序其它界符数字字母出错处理有C表有此单词否?形成一项无形成(C,i)十进制数转化成二进制数K表有此单词否?形成(I,i)形成(K,i)有无查界符表形成(P,i)源程序完否?输出二元式开始开始对源程序扫描扫描到的单词符号首字母是什么?完未完图2词法分析算法流图源程序#include<

7、stdio.h>#include#include#include#include#defineLENGTH110//定义保留字的大小FILE*fp=NULL;//输出流指针FILE*fw=NULL;//输入流指针charcharacter;//字符chartoken[16];//字符数组,用来存放已读入的字符序列//编码表char*CODE[]={"identifier"/*标识符*/,"constant"/*常数*/,"keyword"/*保留字*/,"+",

8、"-","*","/","<","<=",">",">=","!=","==","=","(",")",",",":",";","{","}"};//保留字表char*k[]={"for","

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

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

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