1、 这是 java 编写的 C 语言词法分析器,我将核心代码整理起来,准备放在 QQ 空间和博客上,目的是互相学习借鉴,希望可以得到高手改进。这个词法分析器实现的功能有打开文件、保存文件、打开帮助文档、文本域内容的剪切和复制和黏贴、进行词法分析程序的项目结构如图,Word 类和 Unidentifiable 类是两个 JavaBean 类,存放的参数有两个 row(整型)、word(String),row 用于获取行数,word 用于获取标识符,LexerFrame 是词法分析器的界面类,Analyze 封装了进行词法分析的核心代码 ,doc 文件夹放一个帮助文档,当用户点击帮助按钮时可以弹出来
2、以帮助用户使用。/核心程序:package com.lexer;import java.util.ArrayList;/*120 号为关键字,用下标表示,i+1 就是其机器码;2140 号为操作符,用下标表示,i+21 就是其机器码;4160 号为分界符,* 用下标表示,i+41 就是其机器码;用户自定义的标识符,其机器码为 51;常数的机器码为52;不可以识别的标识符,其机器码为 0*/ public class Analyze /关键字private String keyword=“int“,“long“,“char“,“if“,“else“,“for“,“while“,“return“,
3、“break“,“continue“,“switch“,“case“,“default“,“float“,“double“,“void“,“struct“,“static“,“do“,“short“;/运算符private String operator=“+“,“-“,“*“,“/“,“%“,“=“,“,“=“,“=0else/字符数等于 2 的情况lc=str.charAt(str.length()-1);if(ch=String s=“;char ch;int i;int row=1;for(i=0;i=0ArrayList ulist=new ArrayList();String s,
4、ts,str;Word word;int i;int opcodes=-1;int errorNum=0;int count=0;s=fileContentTextArea.getText();if(s.length()1)ts=analyze.preFunction(s);wlist=analyze.divide(ts);values=new Stringwlist.size()3;while(wlist.size()0)word=(Word)wlist.remove(0);str=word.getWord();i=analyze.check(str);switch (i) case 1:o
5、pcodes=analyze.checkDigit(str);break;case 2:opcodes=analyze.checkChar(str);break;case 3:opcodes=analyze.checkString(str);break;if(opcodes=0)Unidentifiable u=new Unidentifiable(word.getRow(), str);ulist.add(u);errorNum+;valuescount0=String.valueOf(word.getRow();valuescount1=str;valuescount2=String.va
6、lueOf(opcodes);count+;/更新表格内容DefaultTableModel model=(DefaultTableModel)table.getModel();while(model.getRowCount()0)model.removeRow(model.getRowCount()-1);model.setDataVector(values,title);table=new JTable(model);consoleTextArea.append(“共有“+errorNum+“处错误!“+“n“);while (ulist.size()0) int r;String string;Unidentifiable uni=ulist.remove(0);r=uni.getRow();string=uni.getWord();consoleTextArea.append(“第“+r+“行:“+“错误,“+string+“n“);elseint j;j=JOptionPane.showConfirmDialog(this, “请输入程序!“);if(j!=JOptionPane.YES_OPTION)return;