X-n^a^kQ)P9B7s&;
z1vr>mj-#JiG`o?nMb4ju@aGscXiqi!r01YQE14utyrOX^U`&JiWNt()nwh7dx2zot
zYQ)|yjZ7>A*BYwEfta4xg4UChE?^fY<0$S_8#|N`d=SjZ((Pzhr$yiJcvkNddR1^2
zlC3!r$DGp9JPz;p5aGb2BclK=>#}gEE1Ah;C|@H=S}&vLa9vSkqHp4JhT-^(VI2OR
zX3`XzK~K@sw1<91N91GjU?o9$P#LBqE0ae^s;rt+i)vRR)o3+VjZ+7!52%umMFjrf
zMu`~V6hlOkm?pABiFitsiq8M(F;>^Tg)gO0G1Wu%L}jRAQwOL~YK-bo2dN48>mDPf
zh+=U;T)bncY!N#xKc!ZZ8x1Rmm*`%#jP{FI*mwrfo`7w`aUL~>KYr0aOX=Q6YLv9q
zffF4qvCkM~Bj+O{UQ@ipE^58>OMO-Rg8lXT7I7_b(5CqxAO7K3&5r<&Wc9;|NycEF
zhru4n;IfAz{rvGwqxQ+vMyd7JowP}M>x`ccO0});&~eE$9nG;M`x}uv$mVA;v}qty
zESdbO)^7HvAeYGQ@3sa&<0R7nZ5-bR-xf}$wQ=zQy2d?*Xcoj_aT|aaqy|YLMGH(e
Rnqgwqh%7Ypr@N|w{{qV0IGq3h
literal 0
HcmV?d00001
diff --git a/image/clear.png b/image/clear.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3041d4094b8614175f1486ee01e85509d3a0c8b
GIT binary patch
literal 917
zcmV;G18V$Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF*
zm;eA5aGbhPJOBU#6G=otR5(v#WU$}QBF}bON0jpiqxZ+U%Za{xFaNRHAoTXhd#1
zYL>F?vU}>3^qDh_SxM2)V32yu-Zt;#WB2NN|1Dyc-j~#m3}9eT=Vf5{&j>MSCpUxS
zOfCksA`u3S3SkDVdL9OqiJ}bZrMwJk^&$*DX`8r0Y7f-;)?9jPnREQVlzIIrX5rvQ
z2EG(`2EKX|2FX@e28nKY2Bmr%2Gwdi2K6R&2F)%P2Gu4_2GtrbupROB{Q|bR8w)(E
zPCm7a+wh-7GW9uwcV9+Ycpj6J!AXljc_pXv<
zjF?sGnq`{d8~?Ctb^q6N?fRcy()GWfsPIi#RBQ(ypOz46*vw>QkgqXB7GvhOoslBz
zzVwMx!jk`Oee?hKPwe|&T-o?PHahyVw~_E9b$$i~xCWJ6b_Th6BNRi`JQsL2O*?db
z+uoD^ckI~mf5zNJ|MGJ4{^bT6{;!Xa`B4%ivpPVZ&kU%E2^h%C406qiNCxO}OQ@HH
z>^*Q|`MWnSex5pe_5b8a6aSURn*8ZVQvSDPV(|ZEjV}KS-T99g3o|${Fq~m!P;RqC
zGN6!?fx$;^^|D3gx9;BCd*RH9|NSL?|C^#E{w;6!`oD8-(*HFr4*#=U`M+xlGL!)|
zax!SlkVF^&ic|SopouLCmOB@)#}TVNvL0|{n&%EoP)miqMU`l|mc8lC>_<%Jm)$+CXn8R~a!V*BXNrC@#=rkUS&8px?
rpaD!chQNHG(qX}%U9HTZTJHh?-JAjzl@FXl00000NkvXXu0mjfes7=b
literal 0
HcmV?d00001
diff --git a/image/copy.png b/image/copy.png
new file mode 100644
index 0000000000000000000000000000000000000000..d32a8f3713b767297f94e4b3ed3830ffa267b32c
GIT binary patch
literal 910
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
literal 0
HcmV?d00001
diff --git a/image/open.png b/image/open.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c56f688c5165b5de4e5fe71f36c1d7aa45f2ff4
GIT binary patch
literal 991
zcmV<510ei~P)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF*
zm;eA5aGbhPJOBU#T}ebiR5(wKlWRF3=VxpTfCd{Fc`2)rz
z!*Wo^VPK$46v`~2qNOn!B=rEIW7Y!@9AhG#0i={tISG}vphXLOmQq3bp|(<_z<>_8
zeZvovWts8)e_eT=`+e>?>>Lb)!FH4ghbaapS8
z$A)76?_V^<-*k0}pAWW*Cfh4xdvyx&qsHQ}-;`H9xc?F;E_}13<%cG=GL}
z9%zis8a5oUP8d^QYf1)FpN%0KgK?)Bs>0YC6ka$hki{)us4EKC)!!`0XSFGJpVb{K
z7}O{0#yUhUr~Vgos*d5IrWDo}1DFQDGAh>}$G84|En=NFIqb*vFjYs3okodyyf0%0
z{U){
zM6s+g3|098n9SW6r;850cH%*s1`7E_)R&!rMK6J^JrQ<8EUe8jxR$o5Ys*ryi)0=2
z;+rc&Sj9zu6z83R-T62A`g)+M$Vc^GnP4L*jzCc6cs{yzZTWE&qA-xfUQf4L8AZ`3U<{5;%Q?zv_(M>hpxD_oRF2X
zUnu2!^5y4uu+p?JWM`d2-laqupa4UisTj~j!dxE&riKTjVn5_k-zg#Q(}wkn$o97f
zlpe|9%f#E+lms4*3ZqeSIfz2R=)JcGjGDr#A5n8P0Fs#X)}0&NFS`@sP2st31!?=;
z;?E{;W8=epktzNTZIwY_TlP{x1X^zHL9TGiP>2t=;&V^3k3viSbNd1wC*fC-_w#e2
zZ=t*qI2#tDia=?muPgC~mHG`{^Mw>z{lBFN+&VAhdb+noRTvCiS;%xF|I
N002ovPDHLkV1g>%#z_DG
literal 0
HcmV?d00001
diff --git a/image/paste.png b/image/paste.png
new file mode 100644
index 0000000000000000000000000000000000000000..5bafb7ccf03858aeb0966734c6f4dba210b15e5c
GIT binary patch
literal 1035
zcmV+m1oZofP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF*
zm;eA5aGbhPJOBU#iAh93R5(v{lYLB^RTRcA1?CJHvQ3#LWQJ_R1cD<GHv(4@$F5
zL$qB|Yf3=}8{%Mt$wHtb&Y`7lq;+VPV75igmXw$ReDG|Z$}423cKMc4Oj
zVG50e$9HY^^@le($+`DF=XcM&d2RxEG}f_syZ4H?1-uPuX{=Qii-f5N8MNPY?_K9-m4
zHA*vaR+@v3x3=JvC>&3m&?tGK?2Y2cx5-5vf$#5(98jh_E?7
z(QB;PiSDzV&~=;9sJo62n){*d9Du&(3eJCf3F9{%7`NNd*VhM=$rO>x<=S`$i9~p`
zFxA`hX(f8~7jW*YuhFLMh4K?C_*K7xE9*t&$3~3V#xd`|1GjtTeg|}UdHLt@4wx&n
z7OnMOuI1pDmOU7*FT(eS1yHF@gZI%GHWd#;Qf*=YHZ0wvu)4a6+1XiIsZ@Rz2W%ih
z_0D9ky>=TWT6bZrsR+g+yKwpo9V#{B;2#*lhs`EfEEa^Rc`PqS;c~g?ii(Oy01ZFc
z>p1o@e%HJS`^gfR8u(B*R^!WWj5ybG6{a7DFmY=FKA#s03k#T>oTL>BMI5jrod`RM
z*LZI=Wy9I_2As$9VBWtTT6qqxT>b(6fCqogO~XAigWI>~u(-I$yn{PjR#v8o12TxX
zbN8B{t9~Qwhn~gH?>!wo^E&a@lx*`44i5YqqQmg}e9Y-SghC;#tgOK4bpFklNgV_5
zHYf7i1WE4hx050#1jMSyCLJ%O5V=?^I%U3gWAUG*B~UbtKp+tF!N|zSf>x_Fv)SxD
zF~Ig0$Y#-2R-HJDyq}vva+#%dOeF48D67ooYjiLej5-{SkY2B!QmIrIB@)R&4u^AJ
z_wa)yJU)5gaYiWDXf%Jex3}M9@@9cR@G7&nkqOoV&3^&j?!N^@FP#7Y002ovPDHLk
FV1f|G*scHo
literal 0
HcmV?d00001
diff --git a/image/save.png b/image/save.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c01edbcda5cbc3815c509eaea7ea94c50967a56
GIT binary patch
literal 1013
zcmVPx#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF*
zm;eA5aGbhPJOBU#b4f%&R5(wClWk0sR}{yuk{K}zNE~96MB@iZ%#0WmU#2SvI1PeM
zCSk8IO?&|vi*ppT*ir-{3<`pk41pHA$)I2>Edu(`f*>HPQ0N{Ctu6RQ6_gBk3L4?>
z!?qOl%T97~&$&1Em;brv9zy=dhALeB#@oV8Bbsv)gT-7Sju6*(u29sy?ef}hq&>%{^$~a^Ioz#091_F=<~blOZAP1A@YzH+
z{m{-ADeS2itL;Y9kbQJ?ig{{jvj1)HehnP~R4dS$9){>IPf3XTsbvm8yUqgJ$OH@~
z8;!r;t{*psvXP
zW(t^@vSRu{1kmFF)OlgBBob-DOW*|a4a=8@ZEygT>UOmJ*^fS}4ZY^apzjaEJTQ#s
z773;YJ_U5^Fi{bN8~MqI`S~(7aZc*p-Gk>8$Q3P6H|SB_&;`ZKPW)co1-U{6OUE%_
zAP6&ecH?eNIO0#H;lQCB_-u{QyDxSC=8@7e4HWhFP~U7oO(Ts8bqA=Le7xxUmaRVm
z_M6{BnROa*2?f~ubvo91NAKW2YoVElK;>Lcc%^oB*yAmaTG-9@$ZEa?BXtWsX
zQ()$y9Q`U0q@rIT%29$REX5~*u~@S7Ggg7`tbzrEY;h)uDKcCrs)4rIh}%sx8rcUl
z)?UG1>fcayu^5@>%aD;-0q&VX_;QZH<)fWFglyaBXk%PL5z_ONptLlaZyQm6^%_*U
z8Ia``BkzI|nOWD6on3_lUJ-n@AH^b9zg|MN&i#XLBF{fL`eW|6xIk$ymDDi#SyCn=
zNyH@c3Yo++B}{z0nBj88Ow^&Y$yIB@UVY%aT|>x5FNXrZfFB}v?1)YZ4dn_C9!wN`
z9>x^}ha?L2?D(2kJY`k(d
jf8W{jfA;4lkxkwJBeD&~z#cx!00000NkvXXu0mjfl!3","<","!","==","!=",">=","<=","++","--","&","&&","||","[","]"};
+
+ //分界符
+ private String delimiter[]={",",";","(",")","{","}","\'","\"",":","#"};
+
+ public Analyze() {
+
+ }
+
+ /**
+ * 判断是否是数字
+ */
+ public boolean isDigit(char ch){
+ if(ch>='0'&&ch<='9'){
+ return true;
+ }else{
+ return false;
+ }
+ }
+
+ /**
+ * 判断是否是字母的函数
+ */
+ public boolean isLetter(char ch){
+ if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){
+ return true;
+ }else{
+ return false;
+ }
+ }
+
+ /**
+ * 判断是否由两个运算符组成
+ */
+ public boolean isTwoOperator(String str,char ch){
+ char lc;
+ int flag=0;
+ if(str.length()>1||str.length()==0){//字符数大于2和无字符的情况
+ return false;
+ }else{//字符数等于2的情况
+ lc=str.charAt(str.length()-1);
+ if(ch=='='&&(lc=='>'||lc=='<'||lc=='='||lc=='!')){
+
+ }else if(ch=='+'&&lc=='+'){
+
+ }else if(ch=='-'&&lc=='-'){
+
+ }else if(ch=='|'&&lc=='|'){
+
+ }else if(ch=='&'&&lc=='&'){
+
+ }else{
+ return false;//否就返回false
+ }
+ return true;//其它符号的情况都返回true
+ }
+ }
+
+ /**
+ * 获取关键字的机器码
+ */
+ public int getKeywordOpcodes(String str){
+
+ int i;
+ for(i=0;i divide(String str){
+ ArrayList list=new ArrayList();
+
+ String s="";
+ char ch;
+ int i;
+ int row=1;
+
+ for(i=0;i='0'&&ch<='9'){
+ return 1;//数字串
+ }
+ if(str.length()==1)
+ return 2;//单个字符
+ else
+ return 3;//一个字符串
+ }
+
+ /**
+ *
+ * 检查字符串是否为数字串,返回其机器码
+ */
+ public int checkDigit(String str){
+ int i;
+ char ch;
+ for(i=0;i'9'||ch<'0')
+ break;
+ }
+ if(i0){
+ if(!selectFileName.endsWith(".txt")){
+ selectFileName=selectFileName.concat(".txt");
+ }
+
+ file=fileChooser.getCurrentDirectory();
+ file=new File(file.getPath().concat(File.separator).concat(selectFileName));
+
+ if(file.exists()){
+ int i=JOptionPane.showConfirmDialog(this, "文件已经存在,是否覆盖?");
+ if(i!=JOptionPane.YES_OPTION){
+ return;
+ }
+ }
+
+ try {
+ file.createNewFile();
+ FileWriter out=new FileWriter(file);
+ out.write(fileContentTextArea.getText());
+ out.close();
+ JOptionPane.showMessageDialog(this, "保存成功!");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+
+ /**
+ * 剪切
+ */
+ public void doCut(){
+ fileContentTextArea.cut();
+ }
+
+ /**
+ * 复制
+ */
+ public void doCopy(){
+ int dot1,dot2;
+
+ dot1=fileContentTextArea.getSelectionStart();
+
+ dot2=fileContentTextArea.getSelectionEnd();
+
+ if(dot1!=dot2){
+ fileContentTextArea.copy();
+ JOptionPane.showMessageDialog(null, "复制成功!");
+ }
+ }
+
+ /**
+ * 黏贴
+ */
+ public void doPaste(){
+
+ //调用系统剪切板
+ Clipboard clipboard=getToolkit().getSystemClipboard();
+
+ Transferable content=clipboard.getContents(this);
+
+ try {
+ if(content.getTransferData(DataFlavor.stringFlavor) instanceof String){
+ fileContentTextArea.paste();
+ }
+ } catch (UnsupportedFlavorException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ /**
+ * 清除文本框内容
+ */
+ public void doClear(){
+ fileContentTextArea.setText(null);
+ }
+
+ /**
+ * 词法分析
+ */
+ public void doTokenizing(){
+
+ consoleTextArea.setText(null);
+ ArrayList wlist=new ArrayList();
+ ArrayList ulist=new ArrayList();
+
+ String s,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 String[wlist.size()][3];
+ while(wlist.size()>0){
+ word=(Word)wlist.remove(0);
+ str=word.getWord();
+ i=analyze.check(str);
+ switch (i) {
+ case 1:
+ opcodes=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++;
+ }
+
+ values[count][0]=String.valueOf(word.getRow());
+ values[count][1]=str;
+ values[count][2]=String.valueOf(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");
+ }
+ }else{
+ int j;
+ j=JOptionPane.showConfirmDialog(this, "请输入程序!");
+ if(j!=JOptionPane.YES_OPTION){
+ return;
+ }
+ }
+
+ }
+
+
+ /**
+ * 打开使用说明书
+ */
+ public void doHelp(){
+ try {
+ Runtime.getRuntime().exec("cmd /c start "+System.getProperty("user.dir")+"\\doc\\help.doc") ;
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ }
+ }
+
+ /**
+ * 关于
+ */
+ public void showAbout(){
+ JDialog dialog=new JDialog();
+ dialog.setTitle("词法分析器 ");
+ JLabel label=new JLabel(" 基于Java的C语言词法分析器");
+ dialog.add(label);
+ dialog.setVisible(true);
+ dialog.setSize(250, 160);
+ dialog.setResizable(false);
+
+ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+ Dimension frameSize = dialog.getSize();
+ if (frameSize.height > screenSize.height) {
+ frameSize.height = screenSize.height;
+ }
+ if (frameSize.width > screenSize.width) {
+ frameSize.width = screenSize.width;
+ }
+ dialog.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
+
+ }
+
+ /**
+ * 退出
+ */
+ public void doExit(){
+
+ int isExit=JOptionPane.showConfirmDialog(this, "您真的要关闭词法分析器?");
+ if(isExit==JOptionPane.YES_OPTION){
+ System.exit(0);
+ }else{
+ return;
+ }
+ }
+
+ /**
+ * 点击事件
+ */
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(e.getSource()==openMenuItem){
+ openFile();
+ }else if(e.getSource()==saveMenuItem){
+ saveFile();
+ }else if(e.getSource()==exitMenuItem){
+ doExit();
+ }else if(e.getSource()==cutMenuItem){
+ doCut();
+ }else if(e.getSource()==copyMenuItem){
+ doCopy();
+ }else if(e.getSource()==pasteMenuItem){
+ doPaste();
+ }else if(e.getSource()==clearMenuItem){
+ doClear();
+ }else if(e.getSource()==lexerMenuItem){
+ doTokenizing();
+ }else if(e.getSource()==helpMenuItem){
+ doHelp();
+ }else if(e.getSource()==aboutMenuItem){
+ showAbout();
+ }else if(e.getSource()==openButton){
+ openFile();
+ }else if(e.getSource()==saveButton){
+ saveFile();
+ }else if(e.getSource()==lexerButton){
+ doTokenizing();
+ }else if(e.getSource()==cutButton){
+ doCut();
+ }else if(e.getSource()==copyButton){
+ doCopy();
+ }else if(e.getSource()==pasteButton){
+ doPaste();
+ }else if(e.getSource()==clearButton){
+ doClear();
+ }else if(e.getSource()==exitButton){
+ doExit();
+ }
+ }
+
+ /**
+ * 构造方法
+ */
+ public LexerFrame(){
+ setTitle("词法分析器 版本 V 1.0");
+
+ Image logo=Toolkit.getDefaultToolkit().getImage("../lexer/image/lexer.png");
+ setIconImage(logo);
+
+ //创建菜单栏
+ createMenu();
+
+ //创建工具栏
+ createToolBar();
+
+ //左面板
+ leftPanel=new JPanel();
+
+ fileContentTextArea=new JTextArea(60,60);
+ fileContentTextArea.setFont(new Font("隶书",Font.BOLD,12));
+ scrollPane1=new JScrollPane(fileContentTextArea);
+ scrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
+ scrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+ scrollPane1.getViewport().add(fileContentTextArea);
+ scrollPane1.getViewport().setPreferredSize(new Dimension(300,530));
+ leftPanel.add(scrollPane1);
+
+ //右面板
+ rightPanel=new JPanel();
+ rightPanel.setLayout(new BorderLayout());
+
+
+ //分析后的内容放在表格里
+
+ model=new DefaultTableModel(values,title);
+ table=new JTable(model);
+ scrollPane2=new JScrollPane(table);
+ scrollPane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+ scrollPane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ scrollPane2.getViewport().add(table);
+ scrollPane2.getViewport().setPreferredSize(new Dimension(100,100));
+
+ //控制台
+ consoleTextArea = new JTextArea(100,100);
+ consoleTextArea.setFont(new Font("隶书",Font.BOLD,12));
+ scrollPane3=new JScrollPane(consoleTextArea);
+ scrollPane3.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+ scrollPane3.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ scrollPane3.getViewport().add(consoleTextArea);
+ scrollPane3.getViewport().setPreferredSize(new Dimension(300,100));
+
+ //添加到右部面板
+ rightPanel.add("Center",scrollPane2);
+ rightPanel.add("South",scrollPane3);
+
+
+ //创建一个分隔面板
+ splitPane=new JSplitPane();
+
+ //左面板
+ splitPane.setLeftComponent(leftPanel);
+
+ //右面板
+ splitPane.setRightComponent(rightPanel);
+
+ add("North",toolBar);
+ add("Center",splitPane);
+
+ //设置运行时窗口的位置
+ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+ Dimension frameSize = getSize();
+ if (frameSize.height > screenSize.height) {
+ frameSize.height = screenSize.height;
+ }
+ if (frameSize.width > screenSize.width) {
+ frameSize.width = screenSize.width;
+ }
+ setLocation((screenSize.width - frameSize.width) / 6, (screenSize.height - frameSize.height) / 6);
+
+
+ setSize(800,600);
+ setResizable(false);
+ setVisible(true);
+ }
+ /**
+ * 主方法
+ * @param args
+ */
+ public static void main(String[] args) {
+ new LexerFrame();
+ }
+
+
+}
diff --git a/src/com/lexer/Unidentifiable.java b/src/com/lexer/Unidentifiable.java
new file mode 100644
index 0000000..937dc49
--- /dev/null
+++ b/src/com/lexer/Unidentifiable.java
@@ -0,0 +1,38 @@
+package com.lexer;
+
+/**
+ *
+ * JavaBean类
+ * 不可以识别的标识符
+ */
+public class Unidentifiable {
+
+ //不可以识别的标识符行
+ int row;
+
+ //获取到的不可以识别的标识符
+ String word;
+
+ public Unidentifiable(int row,String word){
+ this.row=row;
+ this.word=word;
+ }
+
+ public int getRow() {
+ return row;
+ }
+
+ public void setRow(int row) {
+ this.row = row;
+ }
+
+ public String getWord() {
+ return word;
+ }
+
+ public void setWord(String word) {
+ this.word = word;
+ }
+
+
+}
diff --git a/src/com/lexer/Word.java b/src/com/lexer/Word.java
new file mode 100644
index 0000000..4c7a266
--- /dev/null
+++ b/src/com/lexer/Word.java
@@ -0,0 +1,36 @@
+package com.lexer;
+
+/**
+ *
+ * 可以识别的标识符
+ */
+public class Word {
+
+ //标识符所在的行
+ private int row;
+
+ //获取到的标识符
+ private String word;
+
+ public Word(int row,String word){
+ this.row=row;
+ this.word=word;
+ }
+
+ public int getRow() {
+ return row;
+ }
+
+ public void setRow(int row) {
+ this.row = row;
+ }
+
+ public String getWord() {
+ return word;
+ }
+
+ public void setWord(String word) {
+ this.word = word;
+ }
+
+}
\ No newline at end of file
--
GitLab