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

  • 格式:doc
  • 大小:399.00 KB
  • 文档页数:28

下载文档原格式

  / 28
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二语法分析器

一、实验目的

通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培养适应社会多方面需要的能力。

二、实验内容

◆根据某一文法编制调试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

输出的格式如下:

五、实验源程序

LL1.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.table.DefaultTableModel;

import java.sql.*;

import java.util.Vector;

public class LL1 extends JFrame implements ActionListener {

/**

*

*/

private static final long serialVersionUID = 1L;

JTextField tf1;

JTextField tf2;

JLabel l;

JButton b0;

JPanel p1,p2,p3;

JTextArea t1,t2,t3;

JButton b1,b2,b3;

JLabel l0,l1,l2,l3,l4;

JTable table;

Statement sta;

Connection conn;

ResultSet rs;

DefaultTableModel dtm;

String Vn[]=null;

Vector P=null;

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

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

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

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

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

int LL=0;//标记是否为LL(1)

String vt_tou[]=null;//储存Vt

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

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

LL1()

{

setLocation(100,0);

setSize(700,780);

tf1=new JTextField(13);

tf2=new JTextField(13);

l=new JLabel(">>");

l0=new JLabel("输入字符串:");

l1=new JLabel("输入的文法为:");

l2=new JLabel(" ");

l3=new JLabel("分析的结果:");

l4=new JLabel("预测分析表:");

//p1=new JPanel();

p2=new JPanel();

p3=new JPanel();

t1=new JTextArea(24,20);

t2=new JTextArea(1,30);

t3=new JTextArea(24,40);

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

b1=new JButton(" 判断文法 ");

b2=new JButton("输入");

b3=new JButton("清空");

table=new JTable();

JScrollPane jp1=new JScrollPane(t1);

JScrollPane jp2=new JScrollPane(t2);

JScrollPane jp3=new JScrollPane(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(new JScrollPane(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(new Dimension(660,200));

setVisible(true);

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==b0)

{

String a=tf1.getText();

String b=tf2.getText();