- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验题目:LL(1)分析法
免费下载,不客气
班级:
学号:
姓名:
Edited by Magic Yang
完成日期:2013-5-28
一、实验目的
通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培养适应社会多方面需要的能力。
二、实验内容
根据某一文法编制调试 LL ( 1 )分析程序,以便对任意输入的符号串进行分析。
构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分析程序。
分析法的功能是利用LL(1)控制程序根据显示栈栈顶内容、向前看符号以及LL(1)分析表,对输入符号串自上而下的分析过程。
文法为
(1)E-TG
(2)G-+TG|-TG
(3)G-ε
(4)T-FS
(5)S-*FS|/FS
(6)S-ε
(7)F-(E)
(8)F-i
数据结构及生成的算法描述
事先已经构造好的表:
Vn数组------非终结符表
Vt数组------终结符
Gr数组------文法
事先定义的表及变量:
非终结符按照在非终结符中的位置与first集follow集对应
fi二维数组------first集,为真表示该终结符在该行对应的非终结符的first集中
fo二维数组------follow集,为真表示该终结符在该行对应的非终结符的follow集中
M二维数组------预测分析表
用到的方法:
int or(int i,String s)---返回最近的在其右边一个“|”位置
int vn(char c)---返回c在非终结符表中的位置
int vt(char c)---返回c在终结符表中的位置
void addfi(String s, int j)---求关于某一个产生式的first集
void first(char v)---求非终结符c关于该文法的first集,first调用addfi
void fir()---求所以非终结符的first集,fir调用first
void addfo(String s,int j)---求关于某一个产生式的follow集
void follow(char v)---求非终结符v关于该文法的follow集,follow调用addfo
void fol()---求所以非终结符的follow集,fol调用follow
void MM(int j,int i,String s,int m)---将某一个产生式填入预测分析表中
void build_M()---构造预测分析表,build_M调用MM
void isright(String s)---分析一个符号串是否符合该文法
算法流程图
源程序代码和测试的结果
package package_two;
import java.util.*;
import java.io.*;
public class LL {
char Vn[]={E,T,G,F,S};//非终结符
char Vt[]={+,-,*,/,(,),i,#,ε};//终结符
//非终结符按照在非终结符中的位置与first集follow集对应
boolean fi[][]=new boolean[Vn.length][Vt.length+1];//first集,为真表示该终结符在该行对应的非终结符的first集中
boolean fo[][]=new boolean[Vn.length][Vt.length+1];//follow集,为真表示该终结符在该行对应的非终结符的follow集中
String M[][]=new String[Vn.length][Vt.length-1];//预测分析表
String Gr[]={E-TG,G-+TG|-TG,G-ε,T-FS,S-*FS|/FS,S-ε,F-(E),F-i};//文法
LL(){
fir();//求first集
fol();//求follow集
build_M();//求预测分析表
}
int or(int i,String s){//返回最近的在其右边一个“|”位置
for(i=i+1;is.length();i++){
if(s.charAt(i)==|)
return i;//存在,就返回位置
}
return -1;//返回-1表示没有“|”在其右边
}
int vn(char c){//返回c在非终结符表中的位置
int i;
for(
您可能关注的文档
最近下载
- 少年儿童政治启蒙的内涵、特点与培养路径.docx
- 《国际性教育技术指导纲要》修订版-封面及目录.pdf VIP
- [译林版]6下Unit3 A healthy diet精心梳理教案.pdf
- 十年(2015-2024)高考真题数学分项汇编(全国通用)专题10 三角恒等变换与解三角形小题综合(教师卷).docx
- 成都小升初数学历年真题.doc VIP
- 国防军事展览可行性方案.pptx
- 2015-2024年十年高考数学真题分类汇编专题10 三角恒等变换与解三角形小题综合(原卷版).docx
- 第6章-隧道洞口与洞门设计[65页].pptx VIP
- 第十章 晚唐诗歌.ppt VIP
- 第十章晚唐诗歌.ppt VIP
文档评论(0)