资源描述:
《编译原理自上而下语法分析.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、1.课程设计目的:1.1设计目的:通过编程实现语法分析(自上而下,自下而上)的可视化过程,加深对两法分析原理思想的理解。[目的要求]
通过设计编制调试一个具体的语法分析程序,加深对语法分析原理的理解。
并掌握在对程序设计语言源程序进行扫描过程中将其进行语法分析的方法。
[题目分析]
递归下降分析方法是一种确定的自上而下分析方法。它的基本思想是给文法的每一个非终结符均设计一个相应的子程序。由于文法的产生式往往是递归的,因为这些子程序往往也是递归的。
1.2开发环境:操作系统:WindowsXP辅助工具:VisualS
2、tudio2008编程语言:C#2.课程设计要求(1)选定一文法,选定一种分析方法(自上而下、自下而上)(2)允许用户输入语句并对该语句进行相应的语法分析(3)要求显示语法树的建立过程以及跟踪分析表和分析栈的状态(4)要提供单步运行,让用户跟踪分析器工作的每一个步骤。3.总体设计3.1设计框架:定义两个栈:分析栈、输入栈初始化“分析栈”:“&”、“E”分别入栈初始化“输入栈”:把用户输入的字符串,按倒序每一个分别压入栈初始化后,开始进行自上而下的分析,对于每一步分析,分析栈和输入栈都有相应的出栈入栈动作,分析栈的内
3、容在界面的“栈”中显示,输入栈的内容在界面的“输入“中显示,查表结果在界面的“输出”中显示得出分析结果结束开始3.2程序流程图:开始输入将要分析的字符串该元素是终结符?取分析栈栈顶元素NY该终结符是&Y分析成功N分析栈与输入栈的栈顶元素分别出栈该元素是非终结符YN分析失败查找该元素在非终结符数组中的下标line,返回;取输入栈栈顶元素,并求其在终极符数组中的下标row,返回取col=line*6row,根据col取分析表数组中的字符串mystring[col]该字符串是’’FALSE’’NY是“ε”YN分析失败分析
4、栈栈顶元素出栈分析栈顶元素出栈,把该字符串按倒序一一压入分析栈 4.设计功能描述:(1)该课程设计对语法分析指定了固定的文法,运行界面为:“开始”,会出现提示:。(3)用户输入字符串,可以点击“”,软件根据该输入字符串做好初始化工作,再点击“”,开始分析,每一次点击“下一次”,就做分析的一个步骤,并且此时分析栈和输入栈做相应的出栈、入栈的的动作,同时在“分析栈”,“输入栈”,“输出栈”会显示出相应的状态。(4)分析结果显示在中(5)如果在分析完后,还需要继续输入字符串分析的画,点击“”,可以再次作上述的操作。(6)
5、如果想退出程序,点击““,此时会弹出提示窗口:,点击“确定”,便退出程序。分析实例:输入分析的字符串为i*(i+i)结果如下: 5.源程序代码:#region相关初始量(都是全局的)publicstring[]mystring={"TC","FALSE","FALSE","TC","FALSE","FALSE","FALSE","+TC","FALSE","FALSE","ε","ε","FD","FALSE","FALSE","FD","FALSE","FALSE","FALSE","ε","*FD","FALS
6、E","ε","ε","i","FALSE","FALSE","(E)","FALSE","FALSE"};//分析表数组boolcon=true;//控制显示的布尔量privateStackMyStack=newStack();//申请一个分析栈privateStackMyInputstack=newStack();//申请一个输入栈publicstring[]Term={"i","+","*","(",")","&"};//终结符数组publicstring[]unTerm={"E","C","T","D","
7、F"};//非终结符数组privateintline,row;//定义行,列的全局变量stringMyNowString;#endregion“开始”按钮实现的函数privatevoid开始_Click(objectsender,EventArgse){if(Input_richTextBox1.Text==""){MessageBox.Show("请输入要分析的字符串!");}else{this.MyOutput_listBox3.Items.Add("");MyStack.Push("&");MyStack.P
8、ush("E");MyStack_listBox1.Items.Add("&E");MyInput_listBox2.Items.Add(Input_richTextBox1.Text+"&");MyInputstack.Push("&");for(inti=Input_richTextBox1.Text.Length-1;i>=0;i--){MyInput