当前位置:   article > 正文

c语言的适当大小的子集,使用直接分析法编制C语言子集的词法分析程序

c语言子集语言test语言编译器(或者pascal语言子集)

1、附录 B编译程序实验一、题目使用直接分析法编制 C 语言子集的词法分析程序二、目的通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法三、要求1. 根据具体情况,由同学们自己选取 C 语言的一个适当大小的子集(可取一类典型单词,也可以尽可能使各种类型的单词都兼顾到);在实习前一定要制出相应的表2. 实验时间:48 学时3. 检查内容及时间:A) 完整的实验报告(算法流程必须要有);B) 在机器上调试成功的源程序; 实验报告题目:用直接分析方法编制 PASCAL 语言子集的词法分析程序一、分析对于单词符号。

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

3、指向这四类中某一类对应表格的指针则为指向该类表格中一个特定项目的指针所以整个的词法分析过程就是从源程序中获得一个个的单词符号,将这些符号分别填入四张类表中,并且有一个二元式序列构成一个索引,这个索引为以后的语法分析提供处理上的方便为了减少实习量,可以适量地选取,中的一个子集来进行如下表:表 1保留字表内部地址 1 2 3 4 5 6 7 8 9 10保 留 字 BEGIN CONST DO ELSE END IF PROCEDURE THEN VAR WHILE表 2界符表内部地址 1 2 3 4 5 6 7 8 9 10界符 ; : : ( , ) 组合界符 保留字表包括 10 个有代表性的。

4、保留字,界符表包括关系运算符三种(8,9,10) ,算术运算符(2) ,分隔符三种(1,4,6) ,一对圆括号,加上赋值号共 10 种这两表的内容表明 PASCAL 语言的条件语句,赋值语句,WHILE 型循环语句,复合语句,过程及变量说明均可作为源程序例子输入给词法分析程序,标识符表中的每一项包含一个标识符,常数表中的每一项包含一个整常数,后两表的内容都是在词法分析过程中产生的附录 B编译程序实验如何从源程序中识别出一个个的单词符号呢?图 1 中的流图清晰地反映出这一过程图 1 中,双圆圈的状态表示终态,即能到达终态就代表识别出一个单词符号,而带有号的终态是指处理时应回退一字符二、算法词法分。

5、析器在扫描过程中,依次从源程序中取出源字符,根据图的扫描过程状态转换图,当碰到终态时,即双圆圈的状态时就得到一个单词符号,此时可以根据第一个字符判断单词属于,中哪一类,从而确定单词的单词种别和单词自身的值整个词法分析的算法流程如图三、实现选择实习环境为 TURBO C2.0 语言. 实现程序见附录.四、总结上机前应做好准备即根据实习目的、要求和分析,选择相应的数据结构,使用语言参照算法中的流程编写词法分析的程序将编好的程序上机进行调试注意调试的例子应有词法正确的,也应有词法错误的或是超出所选数据结构范围的实验完成达到实习目的之后,若尚有余力者,可以对所选子集适当扩大或是增加相应功能如:扩充界符。

6、和保留字数目;允许实型常数;进行词法错误检查;最大范围扩充以至 PASCAL 语言所有字符的集合实验完成以后编写出完整的实2字母 非字母与数字1字母与数字0空白4数字 非数字3数字+6;58: 非 =7=9(10,11)12其它171416=图 1扫描程序的状态转换图其它界符数字字母出错处理有C 表有此单词否 ?形成一项无形成(C,i)十进制数转化成二进制数K 表有此单词否?形成(I,i)形成(K,i)有无查界符表形成(P,i)源程序完否?输出二元式开始开始对源程序扫描扫描到的单词符号首字母是什么?完未完图 2 词法分析算法流图附录 B编译程序实验验报告,反映出最后的实验学习结果附录/* 词法。

7、分析器程序 分析对象为 PASCAL 语言源程序文件分析程序主文件: wanalyse.c;保留字文件: token.txt;分析结果存放文件: result.txtWORD ANALYSE DEMO FOR TURBO C 2.0Copyright (c) 2006, 07 Authors: WQJAll rights reserved.From the command line, use: C:wanalyse OBJECT.PAS*/#include stdio.h#include ctype.h#include string.h#define NULL 0#define TOKENSU。

8、M 100FILE *fin,*fout,*fp;char ch,wordget10;int i;void makeword(); /*扫描源程序获得一个单词符号*/void wordproc(); /*对单词符号进行分类处理生成二元式*/void makeword(fpoint) /*扫描源程序获得一个单词符号*/FILE *fpoint;void wordproc() /*对单词符号进行分类处理生成二元式*/main(argc,argv) /*词法分析主程序*/int argc;char *argv;if (argc=1) /*没有被分析文件作为参数*/printf(Please inpu。

9、t filenames of OBJECTn);exit(0);if (fin=fopen(argv1,r)=NULL)printf(Cannot open infilen);exit(0);if (fout=fopen(result.txt,w)=NULL)printf(Cannot open outfilen);exit(0);附录 B编译程序实验if (fp=fopen(token.txt,r)=NULL)printf(Cannot open tokenfilen);exit(0);while(!feof(fin)makeword(fin); /*扫描源程序获得一个单词符号*/wordp。

10、roc(); /*对单词符号进行分类处理生成二元式*/分析对象文件 OBJECT.PASprogram exe6(input,output);PASCAL 分析对象程序const max=1000;type ar=array0.max of integer;var m,n,i,j,s:integer; d:ar;beginreadln(n);for m:=1 to n dobegins:=m*m;j:=0;while s0 dobeginj:=j+1;dj:=s mod 10;s:=s div 10end;i:=1;while (di=dj) and (ij then writeln(m,m*。

11、m:10)%$ endend.分析结果文件 RESULT.TXT(25,-) #PROGRAM#(101,EXE6)(46,-) #(#(68,-) #INPUT#(54,-) #,#(69,-) #OUTPUT#(47,-) #)#(55,-) #;#( 5,-) #CONST#(101,MAX)(40,-) #=#(100,1000)(55,-) #;#(31,-) #TYPE#(12,-) #FOR#(101,M)(52,-) #:=#(100,1)(30,-) #TO#(101,N)( 7,-) #DO#( 3,-) #BEGIN#(101,S)(52,-) #:=#(101,M)(3。

12、8,-) #*#(101,M)(55,-) #;#(100,1)(55,-) #;#(34,-) #WHILE#(46,-) #(#(101,D)(48,-) #(101,I)(49,-) #(40,-) #=#(101,D)(48,-) #(101,J)(49,-) #(47,-) #)#(46,-) #(#(101,M)(54,-) #,#(101,M)(38,-) #*#(101,M)(56,-) #:#(100,10)(47,-) #)#(ERROR,%)(ERROR,$)(10,-) #END#(10,-) #END#(53,-) #.#附录 B编译程序实验(101,AR)(40,-。

13、) #=#( 2,-) #ARRAY#(48,-) #(100,0)(57,-) #.#(101,MAX)(49,-) #(21,-) #OF#(63,-) #INTEGER#(55,-) #;#(33,-) #VAR#(101,M)(54,-) #,#(101,N)(54,-) #,#(101,I)(54,-) #,#(101,J)(54,-) #,#(101,S)(56,-) #:#(63,-) #INTEGER#(55,-) #;#(101,D)(56,-) #:#(101,AR)(55,-) #;#( 3,-) #BEGIN#(77,-) #READLN#(46,-) #(#(101,。

14、N)(47,-) #)#(55,-) #;#(101,J)(52,-) #:=#(100,0)(55,-) #;#(34,-) #WHILE#(101,S)(43,-) #(100,0)( 7,-) #DO#( 3,-) #BEGIN#(101,J)(52,-) #:=#(101,J)(36,-) #+#(100,1)(55,-) #;#(101,D)(48,-) #(101,J)(49,-) #(52,-) #:=#(101,S)(18,-) #MOD#(100,10)(55,-) #;#(101,S)(52,-) #:=#(101,S)( 6,-) #DIV#(100,10)(10,-) 。

15、#END#(55,-) #;#(101,I)(52,-) #:=#( 1,-) #AND#(46,-) #(#(101,I)(42,-) #(101,J)(29,-) #THEN#(82,-) #WRITELN#保留字文件 TOKEN.TXT附录 B编译程序实验ANDARRAYBEGINCASECONSTDIVDODOWNTOELSEENDFILEFORFUNCTIONGOTOIFINLABELMODNILNOTOFORPICKEDPROCEDUREPROGRAMRECORDREPEATSETTHENTOTYPEUNTILVARWHILEWITH+-*/=():=.,;:.FALSETRUEMAXINTINTEGERREALBOOLEANCHARTEXTINPUTOUTPUTDISPOSEGETNEWPACKPAGEPUT READREADLNRESETREWRITEUNPACKWRITEWRITELNABSARCTANCHRCOSEOFEOLNEXPLNODDORDPREDROUNDSINSQRSQRTS。

《使用直接分析法编制C语言子集的词法分析程序》由会员宝路分享,可在线阅读,更多相关《使用直接分析法编制C语言子集的词法分析程序》请在金锄头文库上搜索。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/599438
推荐阅读
相关标签
  

闽ICP备14008679号