实验二语法分析程序设计与实现范文 本文档介绍了实验二语法分析程序的设计与实现,旨在通过设计和编写一个典型的语法分析程序,实现对实验一所得扫描器提供的单词序列进行语法检查和结构分析,并进一步掌握常见的语法分析方法。 一、实验目的 本实验的目的是设计和实现一个语法分析程序,对实验一所得扫描器提供的单词序列进行语法检查和结构分析,并进一步掌握常见的语法分析方法。 二、基本实验内容与要求 本实验的基本内容是选择一种有代表性的语法分析方法,如算符优先法、递归下降法、LL(1)、SLR(1)、LR(1)等,设计并实现一个语法分析程序,针对运算对象为无符号常数和变量的四则运算。语法结构的BNF定义为G2[<算术表示式>]。 G2[<算术表示式>]:<算术表示式> → <项> | <算术表示式>+<项> | <算术表示式>-<项> <项> → <因式> | <项>*<因式> | <项>/<因式> <因式> → <运算对象> | (<算术表示式>) 如果将语法范畴<算术表示式>、<项>、<因式>和<运算对象>分别用E、T、F和i代表,则G2可写成: G2[E]:E → T | E+T | E-T T → F | T*F | T/F F → i | (E) 输入:由实验一输出的单词串,例如:UCON,PL,UCON,MU,ID ······ 输出:若输入源程序中的符号串是给定文法的句子,则输出“RIGHT”,而且给出每一步分析过程;若不是句子,即输入串有错误,则输出“ERROR”,而且显示分析至此所得的中间结果,如分析栈、符号栈中的信息等,以及必要的出错说明信息。 三、问题分析及源程序 根据实验要求,设计并实现了一个LL1语法分析程序。该程序使用C++语言编写,使用了递归下降法实现语法分析。程序的主要功能是对输入的单词串进行语法检查和结构分析,并输出分析结果。 分析表: i+-*/()#EeeGgg1g2g2TttSs2s2ss1s2s2Ff1f LL1源程序: #include<iostream.h> #include<stdio.h> #include<stdlib.h> #include<string.h> char A[30]; /*分析栈*/ char B[30]; /*剩余串*/ char v1[20]={'i','+','-','*','/','(',')','#'}; /*终结符*/ char v2[20]={'E','G','T','S','F'}; /*非终结符*/ int j=0,b=0,top=0,l; /*L为输入串长度*/ class type /*产生式类型定义*/ { public: char origin; /*大写字符*/ char array[5]; /*产生式右边字符 */ int length; /*字符个数*/ }; type e,t,g,g1,g2,s,s1,s2,f,f1; /*类对象*/ type C[10][10]; /*预测分析表*/ void print() /*输出分析栈*/ { int a; for(a=0;a<=top+1;a++) cout<<A[a]; cout<<"\t\t"; } void print1() /*输出符号栈*/ { int a; for(a=0;a<=b;a++) cout<<B[a]; cout<<"\t\t"; } 通过本实验,学生可以掌握语法分析的基本概念和方法,了解LL1语法分析的实现过程,并提高自己的编程能力和问题解决能力。
剩余15页未读,继续阅读
- 粉丝: 2733
- 资源: 8万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助