资源简介

递归下降分析法 一、实验目的: 根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。 二、实验说明 1、递归下降分析法的功能 词法分析器的功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。 2、递归下降分析法的前提 改造文法:消除二义性、消除左递归、提取左因子,判断是否为LL(1)文法, 3、递归下降分析法实验设计思想及算法 为G的每个非终结符号U构造一个递归过程,不妨命名为U。 U的产生式的右边指出这个过程的代码结构: (1)若是终结符号,则和向前看符号对照, 若匹配则向前进一个符号;否则出错。 (2)若是非终结符号,则调用与此非终结符对应的过程。当A的右部有多个产生式时,可用选择结构实现。 三、实验要求 (一)准备: 1.阅读课本有关章节, 2.考虑好设计方案; 3.设计出模块结构、测试数据,初步编制好程序。 (二)上课上机: 将源代码拷贝到机上调试,发现错误,再修改完善。第二次上机调试通过。 (三)程序要求: 程序输入/输出示例: 对下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E->eBaA (2)A->a|bAcB (3)B->dEd|aC (4)C->e|dc 输出的格式如下: (1)递归下降分析程序,编制人:姓名,学号,班级 (2)输入一以#结束的符号串:在此位置输入符号串例如:eadeaa# (3)输出结果:eadeaa#为合法符号串 注意: 1.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好); 2.对学有余力的同学,可以详细的输出推导的过程,即详细列出每一步使用的产生式。 (四)程序思路 0.定义部分:定义常量、变量、数据结构。 1.初始化:从文件将输入符号串输入到字符缓冲区中。 2.利用递归下降分析法分析,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。

资源截图

代码片段和文件信息

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Grammer_Analyse
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender EventArgs e)
        {
            string str = textBox1.Text + “#“;

            string str_1 = GrammerAnalyse(ref str);

            textBox2.Text = str_1;
        }

        //构造语法分析函数
        public string GrammerAnalyse(ref string str)
        {
            bool judge = E(ref str);
            if (judge == true && str.Length ==1)
                return “合法串“;
            else
                return “不是合法串“;
        }
        public bool E(ref string str)
        {
            string head = str.Substring (0 1);

            str = str.Remove(0 1);


            //a = head + “  “ + str;
            if (head == “e“)
            {
                if (B(ref str))
                {
                    string head_1 = str.Substring(0 1);
                    str = str.Remove(0 1);
                    if (head_1 == “a“)
                    {
                        if (A(ref str))
                        {
                            return true;
                        }
                        else return false;
                    }
                    else return false;
                }
                else return false;
            }
            else return false;
        }

        public bool A(ref string str)
        {
            string head = str.Substring(0 1);
            str = str.Remove(0 1);
            if (head == “a“)
            {
                return true;               
            }
            else if (head == “b“)
            {
                if (A(ref str))
                {
                    string head_1 = str.Substring(0 1);
                    str = str.Remove(0 1);
                    if (head_1 == “c“)
                    {
                        if (C(ref str))
                        {
                            return true;
                        }
                        else return false;
                    }
                    else return false;
                }
                else return false;
            }
            else return false;
        }

        public bool B(ref string str)
        {
            string head = str.Substring(0 1);
            str = str.Remove(0 1);
            if (head == “d“)
            {
                if (E(ref str))
                {
                    string head_1 = str.Substring(0 1);
                    str = str.Remove(0 1);
                    if (head_1 == “d“)
                    {
                        return true;
                    }
                    else

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      10752  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse\bin\Debug\Grammer_Analyse.exe

     文件      28160  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse\bin\Debug\Grammer_Analyse.pdb

     文件      14328  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse\bin\Debug\Grammer_Analyse.vshost.exe

     文件        490  2009-06-11 05:14  Grammer_Analyse\Grammer_Analyse\bin\Debug\Grammer_Analyse.vshost.exe.manifest

     文件       4256  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse\Form1.cs

     文件       6111  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse\Form1.Designer.cs

     文件       5814  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse\Form1.resx

     文件       3823  2010-04-22 23:57  Grammer_Analyse\Grammer_Analyse\Grammer_Analyse.csproj

     文件        756  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse\obj\Debug\Grammer_Analyse.csproj.FileListAbsolute.txt

     文件        847  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse\obj\Debug\Grammer_Analyse.csproj.GenerateResource.Cache

     文件      10752  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse\obj\Debug\Grammer_Analyse.exe

     文件        180  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse\obj\Debug\Grammer_Analyse.Form1.resources

     文件      28160  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse\obj\Debug\Grammer_Analyse.pdb

     文件        180  2010-04-22 23:57  Grammer_Analyse\Grammer_Analyse\obj\Debug\Grammer_Analyse.Properties.Resources.resources

     文件        508  2010-04-20 16:43  Grammer_Analyse\Grammer_Analyse\Program.cs

     文件       1386  2010-04-20 16:00  Grammer_Analyse\Grammer_Analyse\Properties\AssemblyInfo.cs

     文件       2880  2010-04-20 16:00  Grammer_Analyse\Grammer_Analyse\Properties\Resources.Designer.cs

     文件       5612  2010-04-20 16:00  Grammer_Analyse\Grammer_Analyse\Properties\Resources.resx

     文件       1100  2010-04-20 16:00  Grammer_Analyse\Grammer_Analyse\Properties\Settings.Designer.cs

     文件        249  2010-04-20 16:00  Grammer_Analyse\Grammer_Analyse\Properties\Settings.settings

     文件        935  2010-04-20 16:00  Grammer_Analyse\Grammer_Analyse.sln

    ..A..H.     17408  2010-04-29 18:38  Grammer_Analyse\Grammer_Analyse.suo

     目录          0  2010-04-22 23:53  Grammer_Analyse\Grammer_Analyse\obj\Debug\TempPE

     目录          0  2010-04-22 23:55  Grammer_Analyse\Grammer_Analyse\bin\Debug

     目录          0  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse\obj\Debug

     目录          0  2010-04-22 23:57  Grammer_Analyse\Grammer_Analyse\bin

     目录          0  2010-04-22 23:53  Grammer_Analyse\Grammer_Analyse\obj

     目录          0  2010-04-22 23:54  Grammer_Analyse\Grammer_Analyse\Properties

     目录          0  2010-04-29 18:37  Grammer_Analyse\Grammer_Analyse

     目录          0  2010-04-21 16:43  Grammer_Analyse

............此处省略3个文件信息

评论

共有 条评论