编译原理LL1文法分析器实验javaWord文档格式.docx
- 文档编号:22568836
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:59.16KB
编译原理LL1文法分析器实验javaWord文档格式.docx
《编译原理LL1文法分析器实验javaWord文档格式.docx》由会员分享,可在线阅读,更多相关《编译原理LL1文法分析器实验javaWord文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
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);
\"
+inputChar+"
+"
匹配"
//将栈顶符号出栈,栈顶指针减一
fenxi[count1]=null;
count1-=1;
if(inputString.length()>
1){//当当前输入字符串的长度大于1时,将当前输入字符从输入字符串中除去
inputString=inputString.substring(1,inputString
.length());
}else{//当前输入串长度为1时
inputChar=inputString;
+count+"
+fenxizhan+"
//"
+inputString+"
+P[count3][count2]);
//System.out.println(count+inputChar+"
匹配"
count++;
judge();
}
}else{//判断与与输入符号是否一样为结束标志
System.out.println("
分析到第"
+count+"
步时出错!
flag=false;
returnfalse;
}else{
//非终结符时
booleanfla=false;
i++){//查询当前输入符号位于终结符集的位置
if(inputChar.equals(Vt[i])){
fla=true;
count2=i;
if(!
fla){
i++){//查询栈顶的符号位于非终结符集的位置
if(fenxi[count1].equals(Vn[i])){
count3=i;
if(P[count3][count2]!
="
){//栈顶的非终结符与输入的终结符存在产生式时
Stringp=P[count3][count2];
Strings1=p.substring(2,p.length());
//获取对应的产生式
if(s1.equals("
)){//产生式推出“ε”时
System.out.println(fenxi[count1]+P[count3][count2]);
//将栈顶符号出栈,栈顶指针指向下一个元素
}else{//产生式不推出“ε”时
intk=s1.length();
for(into=0;
o<
o++){
for(inti=1;
=k;
i++){//将产生式右部的各个符号入栈
Strings2=s1.substring(s1.length()-1,s1.length());
s1=s1.substring(0,s1.length()-1);
if(s2.equals("
'
)){
s2=s1.substring(s1.length()-1,s1.length())+s2;
i++;
s1=s1.substring(0,s1.length()-1);
fenxi[count1]=s2;
if(i<
k)
count1++;
//System.out.println("
count1="
+count1);
//System.out.println(count);
}else{
returnflag;
publicstaticvoidmain(Stringargs[]){
LLl=newLL();
l.setP();
Stringinput="
booleanflag=true;
while(flag){
try{
InputStreamReaderisr=newInputStreamReader(System.in);
BufferedReaderbr=newBufferedReader(isr);
System.out.println();
System.out.print("
请输入字符串(输入exit退出):
input=br.readLine();
}catch(Exceptione){
e.printStackTrace();
if(input.equals("
exit"
)){
}else{
l.setInputString(input);
l.setCount(1,1,0,0);
l.setFenxi();
分析过程"
步骤|分析栈|剩余输入串|所用产生式"
booleanb=l.judge();
if(b){
您输入的字符串"
+input+"
是该文发的一个句子"
}else{
有词法错误!
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 LL1 文法 分析器 实验 java