资源简介
递归下降分析法
一、实验目的:
根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。
二、实验说明
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个文件信息
- 上一篇:复合材料子程序fortran
- 下一篇:中科大10年高级图形图像处理试卷
相关资源
- 算术表达式的目标代码生成
- LL(1)语法分析 任意输入一个文法符
- 编译课程设计报告通过编程实现语法
- 编译原理 递归下降语法分析程序代码
- 对PL0语言及其编译器进行扩充和修改
- 编译原理大作业 完整编译器
- 编译原理课程设计——简单编译器
- 编译原理--词法分析器+语法分析器 源
- pl0语法分析器
- LR(0)语法分析的实现
- 编译——while语句的翻译递归下降,四
- 编译原理 三地址代码生成器
- PL/0语言词法及语法分析系统的设计与
- 编译原理实验报告+源代码 预测分析法
- LL(1)分析过程模拟
- 编译原理实验常工院版
- 编译原理FOR循环语句的翻译程序设计
- LR(0)完整的语法分析方法(拓广文
- OUC编译原理全部实验
- 编译原理上机源代码LR语法分析器
- 编译原理LR0分析代码完整
- 哈工大编译原理实验三语义分析实验
- 用YACC实现语法分析器
- LL(1)语法分析程序实验报告
- 赋值语句的翻译程序设计递归下降法
- 编译原理实验报告,词法分析,语法
- 算符优先分析程序的设计可趁设计
- 赋值语句的语法分析程序递归下降法
- 山东大学编译原理实验
- 编译原理语法分析实验报告
评论
共有 条评论