From ae8be178d5242d83a2591559b046b3d7be3373a4 Mon Sep 17 00:00:00 2001 From: u014427391 <362330721@qq.com> Date: Tue, 2 Feb 2016 14:34:27 +0800 Subject: [PATCH] changes log --- .classpath | 6 + .project | 17 + .settings/org.eclipse.jdt.core.prefs | 11 + bin/com/lexer/Analyze.class | Bin 0 -> 5276 bytes bin/com/lexer/LexerFrame.class | Bin 0 -> 15133 bytes bin/com/lexer/Unidentifiable.class | Bin 0 -> 800 bytes bin/com/lexer/Word.class | Bin 0 -> 770 bytes doc/help.doc | Bin 0 -> 11264 bytes image/clear.png | Bin 0 -> 917 bytes image/copy.png | Bin 0 -> 910 bytes image/cut.png | Bin 0 -> 764 bytes image/exit.png | Bin 0 -> 999 bytes image/help.png | Bin 0 -> 1059 bytes image/lexer.png | Bin 0 -> 598 bytes image/open.png | Bin 0 -> 991 bytes image/paste.png | Bin 0 -> 1035 bytes image/save.png | Bin 0 -> 1013 bytes src/com/lexer/Analyze.java | 306 +++++++++++++ src/com/lexer/LexerFrame.java | 621 +++++++++++++++++++++++++++ src/com/lexer/Unidentifiable.java | 38 ++ src/com/lexer/Word.java | 36 ++ 21 files changed, 1035 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 bin/com/lexer/Analyze.class create mode 100644 bin/com/lexer/LexerFrame.class create mode 100644 bin/com/lexer/Unidentifiable.class create mode 100644 bin/com/lexer/Word.class create mode 100644 doc/help.doc create mode 100644 image/clear.png create mode 100644 image/copy.png create mode 100644 image/cut.png create mode 100644 image/exit.png create mode 100644 image/help.png create mode 100644 image/lexer.png create mode 100644 image/open.png create mode 100644 image/paste.png create mode 100644 image/save.png create mode 100644 src/com/lexer/Analyze.java create mode 100644 src/com/lexer/LexerFrame.java create mode 100644 src/com/lexer/Unidentifiable.java create mode 100644 src/com/lexer/Word.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..18d70f0 --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..ab3dbaf --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + lexer + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..8000cd6 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/bin/com/lexer/Analyze.class b/bin/com/lexer/Analyze.class new file mode 100644 index 0000000000000000000000000000000000000000..d83553e03d4c9a37a12214b6cbbc9ab52e5f510f GIT binary patch literal 5276 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 literal 0 HcmV?d00001 diff --git a/bin/com/lexer/LexerFrame.class b/bin/com/lexer/LexerFrame.class new file mode 100644 index 0000000000000000000000000000000000000000..b8c1ae56e64654ddb02e408dc7d654eb37559fa0 GIT binary patch literal 15133 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 literal 0 HcmV?d00001 diff --git a/bin/com/lexer/Unidentifiable.class b/bin/com/lexer/Unidentifiable.class new file mode 100644 index 0000000000000000000000000000000000000000..6983e4abbb0af06b87f9a5741ead571cf8eca2bc GIT binary patch literal 800 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 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%Z&#a{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