编译语言-语法分析器的设计

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

实验三语法分析器的设计

一、实验内容

设计、编写和调试构造LR(0)项目集规范簇或实现基于LR分析表对给定的符号串进行LR 分析的程序。以下两个内容任选其中一项:

(1)对于给定的文法,实现构造识别该文法全部活前缀DFA的程序。

(2)对于给定的LR分析表和符号串,设计程序以实现所输入符号串是否为合法符号串。

要求用JAVA语言编程。(可参考实验指导书P149至P156)

二、程序代码

AnalysisOfGrammer.java

package analysis;

import javax.swing.*;

import javax.swing.table.DefaultTableModel;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.util.LinkedList;

publicclass AnalysisOfGrammer extends JApplet{

private JFileChooser jfc = new JFileChooser(new File("."));

private JButton jbt1 = new JButton("打开文法文件");

private JButton jbt2 = new JButton("构造LR规范簇");

private JButton jbt3 = new JButton("构造LR分析表");

private JButton jbt4 = new JButton("清空");

private JButton jbt5 = new JButton("退出");

private JLabel jl1 = new JLabel("LR(0)项目集规范簇");

private JLabel jl2 = new JLabel("LR(0)分析表");

private JPanel p3 = new JPanel();

private JTextArea jta1 = new JTextArea();

private String[] grammer = new String[50];

privateint count = 0;

private LinkedListlist = new LinkedList();

private Object content[][] = new Object[100][4];

int num1 = 0;

String[][] cache = new String[50][100];

int[] location = newint[50];

int back = 0;

publicvoid clear1(){

grammer = null;

}

publicvoid clear2(){

num1 = 0;

list = null;

content = null;

cache = null;

location = null;

back = 0;

}

public AnalysisOfGrammer(){

JPanel p1 = new JPanel();

p1.setLayout(new GridLayout(1,5));

p1.add(jbt1);

p1.add(jbt2);

p1.add(jbt3);

p1.add(jbt4);

p1.add(jbt5);

add(p1,BorderLayout.NORTH);

JPanel p4 = new JPanel();

p4.setLayout(new GridLayout(1,2));

JPanel p2 = new JPanel();

p2.setLayout(new BorderLayout());

p2.add(new JLabel("文法为:"),BorderLayout.NORTH);

p2.add(new JScrollPane(jta1),BorderLayout.CENTER);

p4.add(p2);

p4.add(p3);

add(p4,BorderLayout.CENTER);

jbt1.addActionListener(new ActionListener(){

publicvoid actionPerformed(ActionEvent e){

jta1.setText("");

open();

}

});

jbt2.addActionListener(new ActionListener(){

publicvoid actionPerformed(ActionEvent e){

if(jta1.getText().equals(""))

JOptionPane.showMessageDialog(null, "请打开文法文件!");

else{

DNF();

list.get(1).setNextState("接受态");

for(int k = 0 ; k

content[k][0] = list.get(k).getState();

content[k][1] = list.get(k).getProjectSet();

content[k][2] = list.get(k).getNextSign();

content[k][3] = list.get(k).getNextState();

相关文档
最新文档