资源简介
递归下降分析法
一、实验目的:
根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。
二、实验说明
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年高级图形图像处理试卷
相关资源
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 递归下降分析器分析普通的四则运算
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译原理LR(0)语法分析
- 见过的最好 英语语法讲义
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- Kuka库卡机器人编程语法进阶
- 编译原理语法分析器、词法分析器
- LL(1)文法的递归下降分析程序例题
- 山东大学编译原理PL/0语言 compiler实验
- arcpy语法教程入门以及ArcGIS的脚本构建
- FOR循环语句的翻译程序设计简单优先
- NFA的确定化NFA->DFA完整可运行代码
- pl/0编译器 语法分析
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- Ultraedit环境下配置verilog语法高亮的字
- 编译原理课设c编译器
- 赋值语句翻译四元式
评论
共有 条评论