编译原理语法分析报告Word文档格式.doc

上传人:wj 文档编号:1450944 上传时间:2023-04-30 格式:DOC 页数:13 大小:569KB
下载 相关 举报
编译原理语法分析报告Word文档格式.doc_第1页
第1页 / 共13页
编译原理语法分析报告Word文档格式.doc_第2页
第2页 / 共13页
编译原理语法分析报告Word文档格式.doc_第3页
第3页 / 共13页
编译原理语法分析报告Word文档格式.doc_第4页
第4页 / 共13页
编译原理语法分析报告Word文档格式.doc_第5页
第5页 / 共13页
编译原理语法分析报告Word文档格式.doc_第6页
第6页 / 共13页
编译原理语法分析报告Word文档格式.doc_第7页
第7页 / 共13页
编译原理语法分析报告Word文档格式.doc_第8页
第8页 / 共13页
编译原理语法分析报告Word文档格式.doc_第9页
第9页 / 共13页
编译原理语法分析报告Word文档格式.doc_第10页
第10页 / 共13页
编译原理语法分析报告Word文档格式.doc_第11页
第11页 / 共13页
编译原理语法分析报告Word文档格式.doc_第12页
第12页 / 共13页
编译原理语法分析报告Word文档格式.doc_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

编译原理语法分析报告Word文档格式.doc

《编译原理语法分析报告Word文档格式.doc》由会员分享,可在线阅读,更多相关《编译原理语法分析报告Word文档格式.doc(13页珍藏版)》请在冰点文库上搜索。

编译原理语法分析报告Word文档格式.doc

F→i|(E)

该文法的预测分析表为:

代码:

package;

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);

\"

+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{

有词法错误!

}

}

三、实验结果

1、显示预测分析表,提示用户输入字符串

2、输入的字符串为正确的句子

3、输入的字符串中包含了不属于终结符集的字符

4、输入的字符串不是该文法能推导出来的句子

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2