• 大小: 66KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-09-06
  • 语言: Java
  • 标签: java  源码  词法分析  

资源简介

使用直接分析法编制C语言子集的词法分析程序(带实验报告),最近翻出来的以前编译原理课程做的记法分析程序,有需要的参考一下吧,java实现

资源截图

代码片段和文件信息

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class WordAnalyze extends Jframe{
ArrayList wordList=new ArrayList();
//char [] operators={‘=‘‘+‘‘-‘‘*‘‘/‘‘(‘‘)‘‘{‘‘}‘‘‘‘;‘‘#‘‘[‘‘]‘‘<‘‘>‘‘\“‘‘.‘};
StringBuffer temp=new StringBuffer();
String origin=null;
char ch=‘ ‘;
int index=0;
Properties keywords=new Properties();
Properties operators=new Properties();
JToolBar toolbar=new JToolBar();
int strLength=0;


JTextArea textArea;
DefaultTableModel tableModel;
JTable table;
JSplitPane split;

WordAnalyze() {
super(“--简易C语言词法分析器--“);
setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
int xy;
Dimension size=Toolkit.getDefaultToolkit().getScreenSize();
x=(size.width-400)/2;
y=(size.height-400)/2;
setSize(450400);
setLocation(xy);
textArea=new JTextArea();
textArea.setForeground(Color.BLUE);
textArea.setLineWrap(true);
String [] columnNames={“单词““编码““属性“};
tableModel=new DefaultTableModel();
table=new JTable(tableModel);
table.setForeground(Color.BLUE);
tableModel.addColumn(“单词“);
tableModel.addColumn(“编码“);
tableModel.addColumn(“说明“);
split=new JSplitPane(JSplitPane.HORIZONTAL_SPLITnew JScrollPane(textArea)new JScrollPane(table));
toolbar.add(new analyze(“analyze“new ImageIcon(“images\\analyze.gif“)));
toolbar.add(new quit(“quit“new ImageIcon(“images\\quit.gif“)));
getContentPane().add(toolbarBorderLayout.NORTH);
getContentPane().add(split);
split.setDividerLocation(210);
split.setResizeWeight(1);
}

class analyze extends AbstractAction { 
public analyze(String text Icon icon) { 
super(text icon); 

public void actionPerformed(ActionEvent e) {
origin=textArea.getText();
tableModel.setRowCount(0);
strLength=origin.length();
wordList.clear();
loadKeywordAndOperator();
if(analyze())
showResault();


}

class quit extends AbstractAction { 
public quit(String text Icon icon){ 
super(text icon); 

public void actionPerformed(ActionEvent e) { 
System.exit(0);

}

void showResault() {
//textArea.setText(Arrays.toString(wordList.toArray()));
object [] wordArr=wordList.toArray();
String row[]=new String [3];
String code=null;
for(int i=0;i row[0]=(String)wordArr[i];
if((code=keywords.getProperty(row[0]))!=null){
row[1]=code;
row[2]=“关键字“;
}
else if((code=operators.getProperty(row[0]))!=null){
row[1]=code;
row[2]=“运算符/界符“;
}
else if(row[0].charAt(0)>47&&row[0].charAt(0)<58){
row[1]=“0“;
row[2]=“常数“;
}
else {
row[1]=“1“;
row[2]=“标识符“;
}
tableModel.addRow(row);
}

}

void loadKeywordAndOperator() {
try {
keywords.load(new FileInputStream(new File(“keywords.properties“)));
o

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     134656  2007-04-15 15:37  实验一:使用直接分析法编制C语言子集的词法分析程序\使用直接分析法编制C语言子集的词法分析程序.doc

     文件       1104  2007-04-13 16:46  实验一:使用直接分析法编制C语言子集的词法分析程序\源程序\images\analyze.gif

     文件       1116  2007-04-13 16:46  实验一:使用直接分析法编制C语言子集的词法分析程序\源程序\images\quit.gif

    ..A.SH.      4608  2007-04-13 16:53  实验一:使用直接分析法编制C语言子集的词法分析程序\源程序\images\Thumbs.db

     文件        295  2007-04-14 16:33  实验一:使用直接分析法编制C语言子集的词法分析程序\源程序\keywords.properties

     文件        210  2007-04-14 17:04  实验一:使用直接分析法编制C语言子集的词法分析程序\源程序\operators.properties

     文件       1180  2007-04-15 22:17  实验一:使用直接分析法编制C语言子集的词法分析程序\源程序\WordAnalyze$analyze.class

     文件        560  2007-04-15 22:17  实验一:使用直接分析法编制C语言子集的词法分析程序\源程序\WordAnalyze$quit.class

     文件       5963  2007-04-15 22:17  实验一:使用直接分析法编制C语言子集的词法分析程序\源程序\WordAnalyze.class

     文件       4740  2007-04-15 22:17  实验一:使用直接分析法编制C语言子集的词法分析程序\源程序\WordAnalyze.java

     目录          0  2007-04-13 16:53  实验一:使用直接分析法编制C语言子集的词法分析程序\源程序\images

     目录          0  2007-04-15 15:32  实验一:使用直接分析法编制C语言子集的词法分析程序\源程序

     目录          0  2007-06-30 16:55  实验一:使用直接分析法编制C语言子集的词法分析程序

----------- ---------  ---------- -----  ----

               154432                    13


评论

共有 条评论