資源簡介
遞歸下降分析法
一、實驗目的:
根據某一文法編制調試遞歸下降分析程序,以便對任意輸入的符號串進行分析。本次實驗的目的主要是加深對遞歸下降分析法的理解。
二、實驗說明
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年高級圖形圖像處理試卷
評論
共有 條評論