编译原理 课程设计词法分析 2.docx
- 文档编号:2124699
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:23
- 大小:19.25KB
编译原理 课程设计词法分析 2.docx
《编译原理 课程设计词法分析 2.docx》由会员分享,可在线阅读,更多相关《编译原理 课程设计词法分析 2.docx(23页珍藏版)》请在冰点文库上搜索。
编译原理课程设计词法分析2
Test.Java:
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
publicclassTest{
privateStringgjz[]={"int","float","void","if","else","while",
"do","return","main","for"};
privateStringysf[]={"+","-","*","/","<","<=",">",">=","==",
"!
=","=","(",")","[","]","{","}",",",";","++","--"};
privateFilefile;
privateStringfindgjz[]=newString[10];
privateStringfindysf[]=newString[21];
privateStringfindbzf[]=newString[20];
privateStringfindszcl[]=newString[20];
privateStringguanjianzi="关键字:
";
privateStringbiaozhifu="标识符:
";
privateStringfuhao="运算符:
";
privateStringshuzichangliang="数字常量:
";
privateStringflag="";
publicStringCF()
{
returnflag;
}
publicTest(Filefile){
this.file=file;
}
publicStringkindofstyle(Stringstr){
Stringmsg="";
intindex=-1;
charc=str.charAt(0);
if(c<='z'&&c>='a'||c<='Z'&&c>='A'){
for(inti=0;i if(str.equals(gjz[i])){ index=i; } if(index! =-1){ msg+="关键字"; }else{ msg+="标识符"; } }elseif(c<='9'&&c>='0'){ msg+="数字常量"; }else{ msg+="运算符"; } returnmsg; } publicintgjzpriority(Stringstr){ intindex=-1; for(inti=0;i if(str.equals(gjz[i])) index=i+5; returnindex; } publicintysfpriority(Stringstr){ intindex=-1; for(inti=0;i if(str.equals(ysf[i])) index=i+15; returnindex; } publicvoidinitfind(Stringstr[]) { for(inti=0;i { str[i]=""; } } publicvoidaddfind(Stringstr[],Stringstring) { intflag=0; intj=0; for(inti=0;! str[i].equals("");i++) { if(str[i].equals(string)) { flag=1; break; } j++; } if(flag==0) str[j]=string; } publicStringreadFromfile()throwsIOException{ FileInputStreamfin=newFileInputStream(file); //System.out.println(file.getName()+": "); intcount=0; Stringstr=""; Stringstring=""; initfind(findgjz); initfind(findysf); initfind(findbzf); initfind(findszcl); while((count=fin.read())>0){ charc=(char)count; if(c=='\n') { str=""; continue; } if(str.equals("")){ str+=c; }else{ charx=str.charAt(str.length()-1); if(isYunsuanfu(x)){ if(! isYunsuanfu(c)){ if(str.length()==2)//处理“AB,CB之类的 { string+="双目运算符: "+str+"优先级" +ysfpriority(str)+"\n"; addfind(findysf,str); } else { if(ysfpriority(str)==-1) { string+="未定义字符: "+str+"优先级" +ysfpriority(str)+"\n"; for(inti=0;i { if(ysf[i].equals(str)){ addfind(findysf,str);} } } else{ string+="运算符: "+str+"优先级" +ysfpriority(str)+"\n"; for(inti=0;i { if(ysf[i].equals(str)){ addfind(findysf,str);} } } } if(ysfpriority(str)==-1) { flag+=str; } str=""; str+=c; }else{ if(c=='='||c=='+'||c=='-'){ str+=c; }else{ if(str.length()==2)//处理“+—,>=之类 { string+="双目运算符: "+str+"优先级" +ysfpriority(str)+"\n"; addfind(findysf,str); } else { if(ysfpriority(str)==-1) { string+="未定义字符: "+str+"优先级" +ysfpriority(str)+"\n"; for(inti=0;i { if(ysf[i].equals(str)){ addfind(findysf,str);} } } else{ string+="运算符: "+str+"优先级" +ysfpriority(str)+"\n"; for(inti=0;i { if(ysf[i].equals(str)){ addfind(findysf,str);} } } } if(ysfpriority(str)==-1) { flag+=str; } str=""; str+=c; } } } if(isLetter(x)){ if(isLetter(c)){ str+=c; }else{ intindex=-1; if(kindofstyle(str).equals("关键字")) { index=gjzpriority(str); addfind(findgjz,str); } else { index=1; addfind(findbzf,str); } string+=kindofstyle(str)+": "+str+"优先级" +index+"\n"; str=""; str+=c; } } if(isDigital(x)){ if(isDigital(c)) str+=c; else{ string+=kindofstyle(str)+": "+str+"优先级" +"1"+"\n"; addfind(findszcl,str); str=""; str+=c; } } if(x==''){ str=""; str+=c; } } } fin.close(); returnstring; } publicbooleanisYunsuanfu(charc){ if(! isLetter(c)&&! isDigital(c)&&c! ='') returntrue; else returnfalse; } publicbooleanisLetter(charc){ if(c<='z'&&c>='a'||c<='Z'&&c>='A') returntrue; else returnfalse; } publicbooleanisDigital(charc){ if(c<='9'&&c>='0') returntrue; else returnfalse; } publicStringgjzresult() { Stringgjzr=""; for(inti=0;i { gjzr+=findgjz[i]+"\n"; } returngjzr; } publicStringfhresult() { Stringfhr=""; for(inti=0;i { fhr+=findysf[i]+"\n"; } returnfhr; } publicStringbzfresult() { Stringbzfr=""; for(inti=0;i { bzfr+=findbzf[i]+"\n"; } returnbzfr; } publicStringszclresult() { Stringszclfr=""; for(inti=0;i { szclfr+=findszcl[i]+"\n"; } returnszclfr; } publicStringResult() { for(inti=0;i { guanjianzi+=findgjz[i]+""; } for(inti=0;i { fuhao+=findysf[i]+""; } for(inti=0;i { biaozhifu+=findbzf[i]+""; } for(inti=0;i { shuzichangliang+=findszcl[i]+""; } Stringresult=guanjianzi+"\n"+"\n"+biaozhifu+"\n"+"\n"+fuhao+"\n"+"\n"+shuzichangliang+"\n"; //System.out.println(result); returnresult; } } Result.java: importjava.awt.BorderLayout; importjava.awt.GridLayout; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.awt.event.MouseEvent; importjava.awt.event.MouseListener; importjava.io.File; importjava.io.FileReader; importjava.io.FileWriter; importjava.io.IOException; importjavax.swing.JButton; importjavax.swing.JFileChooser; importjavax.swing.JFrame; importjavax.swing.JLabel; importjavax.swing.JMenu; importjavax.swing.JMenuBar; importjavax.swing.JMenuItem; importjavax.swing.JOptionPane; importjavax.swing.JPanel; importjavax.swing.JPopupMenu; importjavax.swing.JScrollPane; importjavax.swing.JTextArea; publicclassResultextendsJFrameimplementsActionListener,MouseListener{ /** * */ privatestaticfinallongserialVersionUID=1L; privateFilefile; privateTesttest; privateJFileChooserfchooser; privateJTextAreasp,spresult,sxzp,gjzp,bzfp,fhp,szclp; privateJButtoncffx,tc; privateJPopupMenupopupmenu; publicResult(){ super("词法分析器"); this.setBounds(300,100,800,600); this.setDefaultCloseOperation(EXIT_ON_CLOSE); JMenuBarmenubar=newJMenuBar(); this.setJMenuBar(menubar); Stringmenustr[]={"文件","编辑","帮助"}; JMenumenu[]=newJMenu[menustr.length]; for(inti=0;i menu[i]=newJMenu(menustr[i]); menubar.add(menu[i]); } Stringmenuitemstr1[]={"清屏","打开","保存","另存为","导出分析结果"}; JMenuItemmenuitem[]=newJMenuItem[menuitemstr1.length]; for(inti=0;i menuitem[i]=newJMenuItem(menuitemstr1[i]); menu[0].add(menuitem[i]); menuitem[i].addActionListener(this); } Stringmenuitemstr2[]={"剪切","复制","粘贴"}; JMenuItemmenuitem2[]=newJMenuItem[menuitemstr2.length]; for(inti=0;i menuitem2[i]=newJMenuItem(menuitemstr2[i]); menu[1].add(menuitem2[i]); menuitem2[i].addActionListener(this); } this.getContentPane().setLayout(newGridLayout(2,1)); JPanelpanel0=newJPanel(newGridLayout(1,2)); sp=newJTextArea(); spresult=newJTextArea(); spresult.setEditable(false); panel0.add(newJScrollPane(sp)); panel0.add(newJScrollPane(spresult)); sp.addMouseListener(this); spresult.addMouseListener(this); this.getContentPane().add(panel0); JPanelpanel=newJPanel(newBorderLayout()); this.getContentPane().add(panel); JPanelpanel1=newJPanel(newGridLayout(1,5)); Stringlabelname[]={"属性字: ","关键字: ","标识符: ","运算符: ","数字常量: "}; JLabellabel[]=newJLabel[labelname.length]; for(inti=0;i label[i]=newJLabel(labelname[i]); panel1.add(label[i]); } panel.add(panel1,"North"); JPanelpanel2=newJPanel(newGridLayout(1,5)); sxzp=newJTextArea(); sxzp.setEditable(false); panel2.add(newJScrollPane(sxzp)); gjzp=newJTextArea(); gjzp.setEditable(false); panel2.add(newJScrollPane(gjzp)); bzfp=newJTextArea(); bzfp.setEditable(false); panel2.add(newJScrollPane(bzfp)); fhp=newJTextArea(); fhp.setEditable(false); panel2.add(newJScrollPane(fhp)); szclp=newJTextArea(); szclp.setEditable(false); panel2.add(newJScrollPane(szclp)); panel.add(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理 课程设计词法分析 编译 原理 课程设计 词法 分析