语法、词法分析结合

上传人:第*** 文档编号:32770521 上传时间:2018-02-12 格式:DOC 页数:19 大小:1.75MB
返回 下载 相关 举报
语法、词法分析结合_第1页
第1页 / 共19页
语法、词法分析结合_第2页
第2页 / 共19页
语法、词法分析结合_第3页
第3页 / 共19页
语法、词法分析结合_第4页
第4页 / 共19页
语法、词法分析结合_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《语法、词法分析结合》由会员分享,可在线阅读,更多相关《语法、词法分析结合(19页珍藏版)》请在金锄头文库上搜索。

1、语法、词法分析结合一、实验目的与要求通过设计、编制、调试一个典型的语法分析程序(任选有代表性的语法分析方法,如算符优先法、递归下降法、LL(1)、SLR(1)、LR(1)等,作为编制语法分析程序的依据) ,对扫描器所提供的单词序列进行语法检查和结构分析,实现并进一步掌握常用的语法分析方法。二、实验内容选择对各种常见高级程序设计语言都较为通用的语法结构作为分析对象,给出其文法描述(注意应与所采用的语法分析方法比较贴近) ,设计并实现一个完整的语法分析程序(分析过程暂不嵌入任何的语义动作) 。输入:由实验一输出的单词串,例如:UCON,PL,UCON 输出:对于输入的符号串,若是给定文法定义的合法

2、句子,则输出“RIGHT” ,并且给出每一步分析过程;若不是句子,即输入串有错误,则输出“ERROR” ,并且显示分析至此所得的中间结果,如分析栈、符号栈中的信息等,以及必要的出错说明信息。三、一般实现方法说明例如,以如下文法 G2 所定义的算术表达式的赋值语句作为分析对象,编写并调试一个语法分析程序。G2: beginend |; := | + | - | * | / | | () | | | | | A|B|C|X|Y|Z|a|b|c|x|y|z 0|1|2|9说明:1)可将以上文法 G2中的语法范畴替换为实验一中的文法G1,并将单词类型 无符号常数进一步细分成整数和浮点数两类单词。2)注

3、意修改实验一中的词法分析程序,将它编写为子程序的形式,以便供语法分析程序调用,从而在对源程序的一遍扫描过程中,同时完成词法和语法分析任务。3)应加强错误检查,对输入符号串中的词法、语法错误,给出必要的说明信息,尽可能多地、确切地指出错误的位置、原因和性质。例如,在词法分析阶段,对当前正在处理的字符 ch,可进一步定义一些与该字符相关的信息 row 和 col,分别表示该字符所在的行和列,这些内容在出错处理时用来提供和源程序位置相关的信息。即定义:char ch; /*The current character*/int row; /*The line number position of th

4、e current character*/int col; /*The column number position of the current character*/四、基本实验题目题目:对算术表达式的一个简化子集,根据如下其语法结构的 BNF 定义 G3 ,任选学过的一种语法分析方法,针对运算对象为无符号数的四则运算,编制一个语法分析程序。G3: | + | - | * | / | ()若将非终结符号、和分别用 E、T、F 和 i 代表,则 G3 可写成:ET|E+T|E-T TF|T*F|T/F Fi|(E)本部分用 SLR(1)分析器的开发。可以根据文法 G3构造识别其全部活前缀的

5、DFA,再据此构造 SLR(1)分析表,然后编程实现 SLR(1)分析表的驱动程序,即 LR 分析器的总控程序,完成对算术表达式的识别。主要是用三维字符数组构造一个 slr(1)的状态转移表,然后主控程序控制查询三维数组,调用一次词法分析再调用一次语法分析。5、源程序说明:因为后面两个程序都是在第一个基础上改进的,所以工程的名字始终是“词法分析”*词法分析.h# include # include # include # include # include # define LB 0/左括号# define RB 1/右括号# define PL 2# define MI 3# define

6、MU 4# define DI 5# define UCON 6 /Suppose the class number of unsigned constant is 7# define OVER 7/# define INT 7# define LT 8# define LE 9# define EQ 10# define NE 11# define GT 12# define GE 13# define IS 19/14 至 18 被五个关键字占用# define ID 20#define MAX_KEY_NUMBER 20 /*关键字的数量*/#define KEY_WORD_END wa

7、iting for your expanding /*关键字结束标记*/char *KeyWordTableMAX_KEY_NUMBER=begin,end, if, then, else, KEY_WORD_END;char TOKEN20=;char ch= ;/用于存储带判断的字符int row=1;/row 标识错误在第几行/无符号数部分#define DIGIT 1#define POINT 2#define OTHER 3#define POWER 4#define PLUS 5#define MINUS 6#define ClassOther 200#define EndStat

8、e -1int index=0;/保存已读的字符串的索引/char JudgeStr256;/存储已读的字符串int w,n,p,e,d;int Class; /Used to indicate class of the wordint ICON;float FCON;static int CurrentState; /Used to present current state, the initial value:0/语法分析部分/产生式/* 1、E-E+T 2、E-E-T 3、E-T 4、T-T*F 5、T-T/F 6、T-F 7、F-(E) 8、F-i*/# define Max 256

9、/goto 表的列项# define E 0# define T 1# define F 2int StateStackMax;/状态栈int StackPoint;/状态栈指针int TopState;/作为状态栈盏栈顶指针int InputWordType;/输入的单词类型/ ( ) + - * / i #char Action1684=s4, , , , , , s5, , , , s6, s7, , , , A, , r3, r3, r3, s8, s9, , r3, , r6, r6, r6, r6, r6, , r6,s4, , , , , , s5, , , r8, r8, r8

10、, r8, r8, , r8,s4, , , , , , s5, ,s4, , , , , , s5, ,s4, , , , , , s5, ,s4, , , , , , s5, , , s15, s6, s7, , , , , , r1, r1, r1, s8, s9, , r1, , r2, r2, r2, s8, s9, , r2, , r4, r4, r4, r4, r4, , r4, , r5, r5, r5, r5, r5, , r5, , r7, r7, r7, r7, r7, , r7,;/action 表/ E T Fint Goto163= 1, 2, 3,-1, -1,

11、-1,-1, -1, -1,-1, -1, -1,10, 2, 3,-1, -1, -1,-1, 11, 3,-1, 12, 3,-1, -1, 13,-1, -1, 14,-1, -1, -1,-1, -1, -1,-1, -1, -1,-1, -1, -1,-1, -1, -1,-1, -1, -1,;/goto 表int EXCUTE (int state, int symbol,FILE *fp,char JudgeStr,int row,int index);int GetChar (char ch);int HandleError (char StrJudge,int row);i

12、nt Push( int State );int Pop(int count);int SLRControl(FILE* fp);*词法分析.c#include 词法分析.h/查保留字表,判断是否为关键字 int lookup (char *token)int n=0;while (strcmp(KeyWordTablen, KEY_WORD_END) /*strcmp 比较两串是否相同,若相同返回 0*/if (!strcmp(KeyWordTablen, token) /*比较 token 所指向的关键字和保留字表中哪个关键字相符*/return n+1; /*根据单词分类码表 I,设置正

13、确的关键字类别码,并返回此类别码的值*/break;n+;return 6; /*单词不是关键字,而是标识符*/输出分析结果void out (int i, char* pStr)char Mnemonic5;if(0=i)strcpy(Mnemonic,LB);else if(1=i)strcpy(Mnemonic,RB);else if(2=i)strcpy(Mnemonic,PL);else if(3=i)strcpy(Mnemonic,MI);else if(4=i)strcpy(Mnemonic,MU);else if(5=i)strcpy(Mnemonic,DI);else if(6=i)strcpy(Mnemonic,UCON);else if(7=i)strcpy(Mnemonic,OVER);els

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号