package byqForYffx;
import java.awt.Container;
import java.awt.Font;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;
//还没写完,后面的交给你了,学长只能帮你到这了。。。
public class For_LL1 {
JDialog winJD;
File f = null;
String filename = null;
BufferedReader br = null;
DefaultTableModel dtm;
String[] lines;
TextArea TA_file_LL1;
TextArea TA_firstset;
TextArea TA_followset;
TextArea TA_ycfx_table;
TextArea TA_fxjz_file;
TextArea TA_fxxs_table;
int flag = 0;
String Vn[] = null;
Vector<String> P = null;
int Vnnum = 0, k;
int firstComplete[] = null;// 存储已判断过first的数据
char first[][] = null;// 存储最后first结果
int followComplete[] = null;// 存储已判断过follow的数据
char follow[][] = null;// 存储最后follow结果
char ycfx_table[][] = null;//
int LL = 0;// 标记是否为LL(1)
String vt_tou[] = null;// 储存Vt
Object shuju[][] = null;// 存储表达式数据
char yn_null[] = null;// 存储能否推出空
public void Window(Byq_Win jframe) {
winJD = new JDialog(jframe, "LL1预测分析--by ***");
winJD.setVisible(true);
winJD.setSize(1000, 700);
winJD.setLayout(null);
winJD.setResizable(false);
winJD.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
winJD.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
winJD.dispose();
}
});
JButton jBu_open = new JButton("打开文件");// 打开文件按钮
jBu_open.setBounds(2, 10, 90, 30);
winJD.getContentPane().add(jBu_open);
JButton jBu_save = new JButton("保存文件");// 保存文件按钮
jBu_save.setBounds(100, 10, 90, 30);
winJD.getContentPane().add(jBu_save);
JButton jBu_getfirstset = new JButton("求First集");// 求first集按钮
jBu_getfirstset.setBounds(200, 10, 90, 30);
winJD.getContentPane().add(jBu_getfirstset);
JButton jBu_getfollowset = new JButton("求Follow集");// ...
jBu_getfollowset.setBounds(300, 10, 100, 30);
winJD.getContentPane().add(jBu_getfollowset);
JButton jBu_get_ycfx_table = new JButton("构造预测分析表");// ...
jBu_get_ycfx_table.setBounds(590, 10, 130, 30);
winJD.getContentPane().add(jBu_get_ycfx_table);
JButton jBu_yjxs = new JButton("一键显示");
jBu_yjxs.setBounds(430, 380, 100, 30);
winJD.getContentPane().add(jBu_yjxs);
JButton jBu_dbxs = new JButton("单步显示");
jBu_dbxs.setBounds(550, 380, 100, 30);
winJD.getContentPane().add(jBu_dbxs);
JButton jBu_exit = new JButton("退出");
jBu_exit.setBounds(860, 10, 90, 30);
winJD.getContentPane().add(jBu_exit);
JLabel jLabel1 = new JLabel("原始文法:请输入形如E->abc的LL1文法,其中的空字符用$代替");
jLabel1.setBounds(10, 50, 400, 20);
jLabel1.setFont(new Font("黑体", 0, 13));
winJD.getContentPane().add(jLabel1);
TA_file_LL1 = new TextArea();// LL1文法文本文件显示区域
TA_file_LL1.setBounds(2, 75, 400, 180);
TA_file_LL1.setFont(new Font("黑体", 0, 15));// 字体属性
winJD.getContentPane().add(TA_file_LL1);
JLabel jLabel2 = new JLabel("First集");
jLabel2.setBounds(10, 260, 400, 20);
jLabel2.setFont(new Font("黑体", 0, 13));
winJD.getContentPane().add(jLabel2);
TA_firstset = new TextArea();// first集显示区域
TA_firstset.setBounds(2, 280, 400, 180);
TA_firstset.setFont(new Font("黑体", 1, 15));// 字体属性
winJD.getContentPane().add(TA_firstset);
TA_firstset.setFocusable(false);
JLabel jLabel3 = new JLabel("Follow集");
jLabel3.setBounds(10, 465, 400, 20);
jLabel3.setFont(new Font("黑体", 0, 13));
winJD.getContentPane().add(jLabel3);
TA_followset = new TextArea();// follow集显示区域
TA_followset.setBounds(2, 485, 400, 180);
TA_followset.setFont(new Font("黑体", 1, 15));// 字体属性
winJD.getContentPane().add(TA_followset);
TA_followset.setFocusable(false);
JLabel jLable4 = new JLabel("预测分析表");
jLable4.setBounds(430, 50, 400, 20);
jLable4.setFont(new Font("黑体", 0, 13));
winJD.getContentPane().add(jLable4);
TA_ycfx_table = new TextArea();
TA_ycfx_table.setBounds(430, 75, 550, 249);
TA_ycfx_table.setFont(new Font("黑体", 1, 15));// 字体属性
winJD.getContentPane().add(TA_ycfx_table);
TA_ycfx_table.setFocusable(false);
dtm = new DefaultTableModel();
JLabel jLable5 = new JLabel("分析句子:");
jLable5.setBounds(430, 335, 60, 20);
jLable5.setFont(new Font("黑体", 0, 13));
winJD.getContentPane().add(jLable5);
TA_fxjz_file = new TextArea();// 分析句子文本显示区域
TA_fxjz_file.setBounds(500, 335, 500, 40);
TA_fxjz_file.setFont(new Font("黑体", 1, 15));
winJD.getContentPane().add(TA_fxjz_file);
TA_fxxs_table = new TextArea();
TA_fxxs_table.setBounds(430, 415, 550, 250);
TA_fxxs_table.setFont(new Font("黑体", 1, 15));
winJD.getContentPane().add(TA_fxxs_table);
TA_fxxs_table.setFocusable(false);
// 监听器安装
jBu_open.addActionListener(new ActionListener() {// 打开读取文件
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"TXT", "txt");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(getParent());
if (returnVal == JFileChooser.APPROVE_OPTION) {
f = chooser.getSelectedFile();
filename = chooser.getSelectedFile().getPath()
.toString();
} else
filename = null;
TA_file_LL1.setText("");
try {
br = new BufferedReader(new FileReader(filename));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
String text;
try {
while ((text = br.readLine()) != null)
TA_file_LL1.append(text + "\n");
} catch (IOException e1) {
e1.printStackTrace();
}
openFile(filename);
}
});
jBu_save.addActionListener(new ActionListener() {// 保存文件
public void actionPerformed(ActionEvent e) {
String s = f.getAbsolutePath();
if (s.equals("") || s == null) {
JOptionPane.showMessageDialog(null, "路径为空,请检查!");
return;
}
saveFile(s);
}
});
jBu_exit.addActionListener(new ActionListener() {// 退出
public void actionPerformed(ActionEvent e) {
winJD.dispose();// 退出
}
});
jBu_getfirstset.addActionListener(new ActionListener() {// 求firsta集
@Override
public void actionPerformed(ActionEvent arg0) {
TA_firstset.setText("");
Vn = new String[100];
P = new Vector<String>();
String s[] = TA_file_LL1.getText().split("\n");
for (int i = 0; i < s.length; i++) {
if (s.length < 2) {
TA_firstset.setText("文法输入有误,请重新输入");// 判断长度是否符合
return;
}
if (s[i].charAt(0) <= 'Z' && s[i].charAt(0) >= 'A'
&& s[i].charAt(1) == '→') {
for (k = 0; k < Vnnum; 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 {
TA_firstset.setText("文法输入有误,请重新输入");
return;
}
}
yn_null = new char[100];
first = new char[Vnnum][100];
编译器(词法分析,语法分析)
5星 · 超过95%的资源 需积分: 50 100 浏览量
2013-01-04
23:18:37
上传
评论 17
收藏 67KB ZIP 举报
6x5
- 粉丝: 1
- 资源: 3
最新资源
- 基于matlab实现夜间车牌识别程序(1).rar
- 基于matlab实现图像处理,本程序使用背景差分法对来往车辆进行检测和跟踪.rar
- 基于matlab实现视频监控中车型识别代码,自己写的,希望和大家多多交流.rar
- sdk.config
- 基于matlab实现配电网三相潮流计算方法,对几种常用的配电网潮流计算方法进行了对比分析.rar
- 基于matlab实现配电网潮流 经典33节点 前推回代法潮流计算 回代电流 前推电压 带注释.rar
- 基于matlab实现模拟退火遗传算法的车辆调度问题研究,用MATLAB语言加以实现.rar
- 基于matlab实现蒙特卡洛的的移动传感器节点定位算法仿真代码.rar
- 华中数控系统818用户说明书
- 基于matlab实现卡尔曼滤波器完成多传感器数据融合 对多个机器人的不同传感器数据进行融合估计足球精确位置.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
前往页