编译原理语法分析器java完美运行版.docx

上传人:b****1 文档编号:2334168 上传时间:2022-10-28 格式:DOCX 页数:35 大小:281.73KB
下载 相关 举报
编译原理语法分析器java完美运行版.docx_第1页
第1页 / 共35页
编译原理语法分析器java完美运行版.docx_第2页
第2页 / 共35页
编译原理语法分析器java完美运行版.docx_第3页
第3页 / 共35页
编译原理语法分析器java完美运行版.docx_第4页
第4页 / 共35页
编译原理语法分析器java完美运行版.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

编译原理语法分析器java完美运行版.docx

《编译原理语法分析器java完美运行版.docx》由会员分享,可在线阅读,更多相关《编译原理语法分析器java完美运行版.docx(35页珍藏版)》请在冰豆网上搜索。

编译原理语法分析器java完美运行版.docx

编译原理语法分析器java完美运行版

实验二语法分析器

一、实验目的

通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。

使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。

有利于提高学生的专业素质,为培养适应社会多方面需要的能力。

二、实验内容

◆根据某一文法编制调试LL

(1)分析程序,以便对任意输入的符号串进行分析。

◆构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分析程序。

◆分析法的功能是利用LL

(1)控制程序根据显示栈栈顶内容、向前看符号以及LL

(1)分析表,对输入符号串自上而下的分析过程。

三、LL

(1)分析法实验设计思想及算法

◆模块结构:

(1)定义部分:

定义常量、变量、数据结构。

(2)初始化:

设立LL

(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);

(3)控制部分:

从键盘输入一个表达式符号串;

(4)利用LL

(1)分析算法进行表达式处理:

根据LL

(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。

四、实验要求

1、编程时注意编程风格:

空行的使用、注释的使用、缩进的使用等。

2、如果遇到错误的表达式,应输出错误提示信息。

3、对下列文法,用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

输出的格式如下:

5、实验源程序

LL1.java

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

importjavax.swing.table.DefaultTableModel;

importjava.sql.*;

importjava.util.Vector;

publicclassLL1extendsJFrameimplementsActionListener

{

/**

*

*/

privatestaticfinallongserialVersionUID=1L;

JTextFieldtf1;

JTextFieldtf2;

JLabell;

JButtonb0;

JPanelp1,p2,p3;

JTextAreat1,t2,t3;

JButtonb1,b2,b3;

JLabell0,l1,l2,l3,l4;

JTabletable;

Statementsta;

Connectionconn;

ResultSetrs;

DefaultTableModeldtm;

StringVn[]=null;

VectorP=null;

intfirstComplete[]=null;//存储已判断过first的数据

charfirst[][]=null;//存储最后first结果

intfollowComplete[]=null;//存储已判断过follow的数据

charfollow[][]=null;//存储最后follow结果

charselect[][]=null;//存储最后select结果

intLL=0;//标记是否为LL

(1)

Stringvt_tou[]=null;//储存Vt

Objectshuju[][]=null;//存储表达式数据

charyn_null[]=null;//存储能否推出空

LL1()

{

setLocation(100,0);

setSize(700,780);

tf1=newJTextField(13);

tf2=newJTextField(13);

l=newJLabel(">>");

l0=newJLabel("输入字符串:

");

l1=newJLabel("输入的文法为:

");

l2=newJLabel("");

l3=newJLabel("分析的结果:

");

l4=newJLabel("预测分析表:

");

//p1=newJPanel();

p2=newJPanel();

p3=newJPanel();

t1=newJTextArea(24,20);

t2=newJTextArea(1,30);

t3=newJTextArea(24,40);

b0=newJButton("确定(S为开始)");

b1=newJButton("判断文法");

b2=newJButton("输入");

b3=newJButton("清空");

table=newJTable();

JScrollPanejp1=newJScrollPane(t1);

JScrollPanejp2=newJScrollPane(t2);

JScrollPanejp3=newJScrollPane(t3);

p2.add(tf1);

p2.add(l);

p2.add(tf2);

p2.add(b0);

p2.add(b1);

p2.add(l0);

p2.add(l2);

p2.add(jp2);

p2.add(b2);

p2.add(b3);

p2.add(l1);

p2.add(l3);

p2.add(jp1);

p2.add(jp3);

p3.add(l4);

p3.add(newJScrollPane(table));

add(p2,"Center");

add(p3,"South");

b0.addActionListener(this);

b1.addActionListener(this);

b2.addActionListener(this);

b3.addActionListener(this);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

table.setPreferredScrollableViewportSize(newDimension(660,200));

setVisible(true);

}

publicvoidactionPerformed(ActionEvente)

{

if(e.getSource()==b0)

{

Stringa=tf1.getText();

Stringb=tf2.getText();

t1.append(a+'→'+b+'\n');

}

if(e.getSource()==b1)

{

t3.setText("");

intVnnum=0,k;

Vn=newString[100];

P=newVector();

Strings[]=t1.getText().split("\n");

for(inti=0;i

{

if(s.length<2){

t3.setText("文法输入有误,请重新输入");//判断长度是否符合

return;

}

if(s[i].charAt(0)<='Z'&&s[i].charAt(0)>='A'&&s[i].charAt

(1)=='→')

{

for(k=0;k

{

if(Vn[k].equals(s[i].substring(0,1))){

break;

}

}

if(Vnnum==0||k>=Vnnum)

{

Vn[Vnnum]=s[i].substring(0,1);//存入Vn数据

Vnnum++;

}

P.add(s[i]);

}

else

{

t3.setText("文法输入有误,请重新输入");

return;

}

}

yn_null=newchar[100];

first=newchar[Vnnum][100];

intflag=0;

StringfirstVn[]=null;

firstComplete=newint[Vnnum];

for(inti=0;Vn[i]!

=null;i++)//依次求FIRST**

{

flag=0;

firstVn=newString[20];

if((flag=add_First(first[i],Vn[i],firstVn,flag))==-1)return;

firstComplete[i]=1;

}

t3.append("first集:

"+"\n");//显示FIRST**

for(inti=0;Vn[i]!

=null;i++)

{

t3.append("first("+Vn[i]+")={");

for(intj=0;first[i][j]!

='\0';j++)

{

t3.append(first[i][j]+",");

}

t3.append("}"+"\n");

}

follow=newchar[Vnnum][100];

StringfollowVn[]=null;

followComplete=newint[Vnnum];

for(inti=0;Vn[i]!

=null;i++)//求FOLLOW**

{

flag=0;

followVn=newString[20];

if((flag=tianjiaFollow(follow[i],Vn[i],followVn,flag))==-1)return;

followComplete[i]=1;

}

t3.append("follow集:

"+"\n");//显示FOLLOW**

for(inti=0;Vn[i]!

=null;i++)

{

t3.append("follow("+Vn[i]+")={");

for(intj=0;follow[i][j]!

='\0';j++)

{

t3.append(follow[i][j]+",");

}

t3.append("}"+"\n");

}

select=newchar[P.size()][100];

for(inti=0;i

{

flag=0;

tianjiaSelect(select[i],(String)P.elementAt(i),flag);

}

t3.append("select集:

"+"\n");//显示SELECT**

for(inti=0;i

{

t3.append("select("+(String)P.elementAt(i)+")={");

for(intj=0;select[i][j]!

='\0';j++)

{

t3.append(select[i][j]+",");

}

t3.append("}"+"\n");

}

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

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1