编译语言-语法分析器的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 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();