广东海洋大学编译原理LL1文法分析器实验java文档格式.doc
- 文档编号:13167831
- 上传时间:2022-10-07
- 格式:DOC
- 页数:12
- 大小:247.50KB
广东海洋大学编译原理LL1文法分析器实验java文档格式.doc
《广东海洋大学编译原理LL1文法分析器实验java文档格式.doc》由会员分享,可在线阅读,更多相关《广东海洋大学编译原理LL1文法分析器实验java文档格式.doc(12页珍藏版)》请在冰豆网上搜索。
理解相关文法的步骤;
熟悉First集和Follow集生成
二、实验要求
对于给定的文法,试编写调试一个语法分析程序:
要求和提示:
(1)可选择一种你感兴趣的语法分析方法(LL
(1)、算符优先、递归下降、
SLR
(1)等)作为编制语法分析程序的依据。
(2)对于所选定的分析方法,如有需要,应选择一种合适的数据结构,以构造
所给文法的机内表示。
(3)能进行分析过程模拟。
如输入一个句子,能输出与句子对应的语法树,能
对语法树生成过程进行模拟;
能够输出分析过程每一步符号栈的变化情况。
设计一个由给定文法生成First集和Follow集并进行简化的算法动态模拟。
三、实验过程
1:
文法:
E->
TE’
E’->
+TE’|εT->
FT’
T’->
*FT’|εF->
(E)|i:
2程序描述(LL
(1)文法)
本程序是基于已构建好的某一个语法的预测分析表来对用户的输入字符串进行分析,判断输入的字符串是否属于该文法的句子。
基本实现思想:
接收用户输入的字符串(字符串以“#”表示结束)后,对用做分析栈的一维数组和存放分析表的二维数组进行初始化。
然后取出分析栈的栈顶字符,判断是否为终结符,若为终结符则判断是否为“#”且与当前输入符号一样,若是则语法分析结束,输入的字符串为文法的一个句子,否则出错若不为“#”且与当前输入符号一样则将栈顶符号出栈,当前输入符号从输入字符串中除去,进入下一个字符的分析。
若不为“#”且不与当前输入符号一样,则出错。
四、程序流程图
本程序中使用以下文法作对用户输入的字符串进行分析:
E→TE’
E’→+TE’|ε
T→FT’
T’→*FT’|ε
F→i|(E)
该文法的预测分析表为:
五:
结果及截图
1、显示预测分析表,提示用户输入字符串
2、输入的字符串为正确的句子:
3、输入的字符串中包含了不属于终结符集的字符
4、输入的字符串不是该文法能推导出来的句子
程序代码:
packagecomplier;
importjava.io.*;
publicclassLL{
StringVn[]={"
E"
"
E'
"
T"
T'
F"
};
//非终结符集
StringVt[]={"
i"
+"
*"
("
)"
#"
//终结符集
StringP[][]=newString[5][6];
//预测分析表
Stringfenxi[];
//分析栈
intcount=1;
//步骤
intcount1=1;
//’分析栈指针
intcount2=0,count3=0;
//预测分析表指针
StringinputString="
;
//输入的字符串
booleanflag;
publicvoidsetCount(intcount,intcount1,intcount2,intcount3){
this.count=count;
this.count1=count1;
this.count2=count2;
this.count3=count3;
flag=false;
}
publicvoidsetFenxi(){//初始化分析栈
fenxi=newString[20];
fenxi[0]="
fenxi[1]="
publicvoidsetP(){//初始化预测分析表
for(inti=0;
i<
5;
i++){
for(intj=0;
j<
6;
j++){
P[i][j]="
error"
}
}
P[0][0]="
->
TE'
P[0][3]="
P[1][1]="
+TE'
P[1][4]="
ε"
P[1][5]="
P[2][0]="
FT'
P[2][3]="
P[3][1]="
P[3][2]="
*FT'
P[3][4]="
P[3][5]="
P[4][0]="
P[4][3]="
(E)"
//打印出预测分析表
System.out.println("
已构建好的预测分析表"
);
----------------------------------------------------------------------"
for(inti=0;
i<
6;
System.out.print("
"
+Vt[i]);
System.out.println();
5;
"
+Vn[i]+"
"
for(intj=0;
j<
intl=0;
if(j>
0){
l=10-P[i][j-1].length();
}
for(intk=0;
k<
l;
k++){
System.out.print("
"
System.out.print(P[i][j]+"
System.out.println();
publicvoidsetInputString(Stringinput){
inputString=input;
publicbooleanjudge(){
StringinputChar=inputString.substring(0,1);
//当前输入字符
booleanflage=false;
if(count1>
=0){
for(inti=0;
if(fenxi[count1].equals(Vt[i])){//判断分析栈栈顶的字符是否为终结符
flage=true;
break;
if(flage){//为终结符时
if(fenxi[count1].equals(inputChar)){
if(fenxi[count1].equals("
)&
&
inputString.length()==1){//栈顶符号为结束标志时
//System.out.println("
最后一个"
Stringfenxizhan="
for(inti=0;
=P.length;
i++){//拿到分析栈里的全部内容(滤去null)
if(fenxi[i]==null){
break;
}else{
fenxizhan=fenxizhan+fenxi[i];
}
}
//输出当前分析栈情况,输入字符串,所用产生式或匹配
+count);
StringcountToString=Integer.toString(count);
intfarWay=14-countToString.length();
for(intk=0;
farWay;
System.out.print("
System.out.print(fenxizhan);
farWay=20-fenxizhan.length();
System.out.print(inputString);
farWay=25-inputString.length();
System.out.println("
接受"
flag=true;
returntrue;
}else{//分析栈栈顶符号不为结束标志符号时
+count);
System.out.p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 广东 海洋大学 编译 原理 LL1 文法 分析器 实验 java