编译原理 词法分析.docx
- 文档编号:24414247
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:28
- 大小:20.15KB
编译原理 词法分析.docx
《编译原理 词法分析.docx》由会员分享,可在线阅读,更多相关《编译原理 词法分析.docx(28页珍藏版)》请在冰豆网上搜索。
编译原理词法分析
package词法分析;
importjava.awt.FileDialog;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.util.Stack;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JTextArea;
importjavax.swing.JTextField;
import词法分析.key;
import词法分析.operator;
import词法分析.symbol;
publicclassfunctionextendsJFrame{
staticfinallongserialVersionUID=1L;
intstart,end,i=0,j=0,line=0,flag=0,flag1=0;
Stack
Stack
Stack
charc,c8;
Lexical_Framef1=newLexical_Frame(5);
JTextAreaf11=newJTextArea();
keyk=newkey();
operatorop=newoperator();
symbolsy=newsymbol();
Stringstr="",currut="",token="";
FileDialogopen,save;
JTextFieldstring_Rearch,string_Replace;
JButtonbtn_Search,btn_Search_Next,btn_Replace,btn_Replace_All;
function()
{
;
}
publicStringop(JTextAreafile1,Lexical_Framet,JTextAreafile3)
{
open=newFileDialog(t,"打开",FileDialog.LOAD);
open.setVisible(true);
try{
Filef12=newFile(open.getDirectory(),open.getFile());
t.frame.setTitle(""+open.getDirectory()+open.getFile());
FileReaderfr=newFileReader(f12);
BufferedReaderbr=newBufferedReader(fr);
while((str=br.readLine())!
=null)
{
line++;
j=str.length();
file1.append(line+""+str+'\n');
for(i=0;i { c=str.charAt(i); flag=0; currut="";token=""; if(c==32) continue; if(str.charAt(i)=='/'&&(str.charAt(i+1)=='*'||str.charAt(i+1)=='/')) { if(str.charAt(i)=='/'&&str.charAt(i+1)=='*') flag1=1; elsebreak; } if(flag1==1) { for(i=0;i if(str.charAt(i)=='*'&&str.charAt(i+1)=='/') { flag1=0; i=i+2; } } if(i if(is_identifiers_key(file3)) continue; if(is_digital(file3)) continue; if(is_oper(file3)) continue; if(is_sym_String(file3)) continue; } if(c<0||c>255) f11.append("存在非法字符: "+c+"在第"+line+"行"+'\n'); } } if(flag1==1)System.out.println("未找到注释结尾符号"); if(! e.empty()) f11.append("少了)括号"+'\n'); if(! e1.empty()) f11.append("少了[括号"+'\n'); if(! e2.empty()) f11.append("少了}括号"+'\n'); t.filee.setText(f11.getText()); fr.close(); } catch(Exceptione1) {} file1.setVisible(true); returnopen.getDirectory()+open.getFile(); } publicbooleanis_identifiers_key(JTextAreafile3) { if(flag1==0&&((str.charAt(i)>=65&&str.charAt(i)<=90)||(str.charAt(i)>=97&&str.charAt(i)<=122)||str.charAt(i)=='_')) { c=(str.charAt(i)); while(i sy.is_sym(str.charAt(i))&&! op.isoperator(str.charAt(i))&&(str.charAt(i)! ='')) { currut=Character.toString(str.charAt(i)); token=token+currut; i++; } if(k.iskey(token)==1) { file3.append("("+token+","+"关键字"+","+line+"行"+")"+'\n'); } else{ file3.append("("+token+","+"标识符"+","+line+"行"+")"+'\n'); } token="1"; i--; flag=1; returntrue; } returnfalse; } publicbooleanis_digital(JTextAreafile3) { if(flag1==0&&str.charAt(i)>=48&&str.charAt(i)<=57) { while(i { c=(str.charAt(i)); currut=Character.toString(str.charAt(i)); token=token+currut; i++; } file3.append("("+token+","+"数字常量"+","+line+"行"+")"+'\n'); //c=(str.charAt(i)); token="1"; flag=1; i--; returntrue; } returnfalse; } publicbooleanis_oper(JTextAreafile3) { if(flag1==0&&op.isoperator(str.charAt(i))) { while(i { c=(str.charAt(i)); currut=Character.toString(str.charAt(i)); i++; if(c=='('||c=='['||c==')'||c==']'||c==',') { if(c=='(') e.push(c); if(c==')') if(! e.empty()) e.pop(); elseSystem.out.println("少了(括号"); if(c=='[') e1.push(c); if(c==']') if(! e1.empty()) e1.pop(); elsef11.append("少了[括号"+line+'\n'); file3.append("("+c+","+"操作运算符"+","+line+"行"+")"+'\n'); } elsetoken=token+currut; if(token.equals("++")||token.equals("--")) break; } if(! token.equals("")) if(op.is_leagl_oper(token)) file3.append("("+token+","+"操作运算符"+","+line+"行"+")"+'\n'); elsef11.append("第"+line+"行"+i+"列存在非法操作运算符"+token); i--; token="1"; flag=1; returntrue; } returnfalse; } publicbooleanis_sym_String(JTextAreafile3) { if(flag1==0&&sy.is_sym(str.charAt(i))) {c=(str.charAt(i)); if(str.charAt(i)=='"'||str.charAt(i)=='\'') {c=str.charAt(i); file3.append("("+"\""+","+"界定字符"+","+line+"行"+")"+'\n'); i++; while(i ='"'&&str.charAt(i)! ='\'') { if((str.charAt(i)=='\\'&&str.charAt(i+1)=='n')||(str.charAt(i)=='%'&&((str.charAt(i+1)=='f'||str.charAt(i+1)=='d'||str.charAt(i+1)=='c'||str.charAt(i+1)=='s')))) i=i+2; else { currut=Character.toString(str.charAt(i)); token=token+currut; i++; } } file3.append("("+token+","+"字符串常量"+","+line+"行"+")"+'\n'); file3.append("("+c+","+"界定字符"+","+line+"行"+")"+'\n'); //i++; flag=1; } else{ if(str.charAt(i)=='{') {e2.push(str.charAt(i)); } if(str.charAt(i)=='}') if(! e2.empty()) { e2.pop(); } elsef11.append("少了{括号"+'\n'); file3.append("("+str.charAt(i)+","+"界定字符"+","+line+"行"+")"+'\n'); } flag=1; returntrue; } returnfalse; } publicvoidsv(JTextAreafile1,Lexical_Framet) { save=newFileDialog(t,"另存为",FileDialog.SAVE); save.setVisible(true); try{ Filef1=newFile(save.getDirectory(),save.getFile()); FileWriterfw=newFileWriter(f1); BufferedWriterbw=newBufferedWriter(fw); Stringgt=file1.getText(); String[]lines=gt.split("\n"); for(intj=0;j bw.write(lines[j]+"\r\n"); } bw.flush(); fw.close(); } catch(Exceptione2) {} } } package词法分析; publicclasskey{ inti=0; Stringkey_Word[]=newString[32]; publickey() { key_Word[0]=newString("auto"); key_Word[1]=newString("break"); key_Word[2]=newString("case"); key_Word[3]=newString("char"); key_Word[4]=newString("const"); key_Word[5]=newString("continue"); key_Word[6]=newString("default"); key_Word[7]=newString("do"); key_Word[8]=newString("double"); key_Word[9]=newString("else"); key_Word[10]=newString("enum"); key_Word[11]=newString("extern"); key_Word[12]=newString("float"); key_Word[13]=newString("for"); key_Word[14]=newString("goto"); key_Word[15]=newString("if"); key_Word[16]=newString("int"); key_Word[17]=newString("long"); key_Word[18]=newString("register"); key_Word[19]=newString("return"); key_Word[20]=newString("short"); key_Word[21]=newString("signed"); key_Word[22]=newString("static"); key_Word[23]=newString("sizeof"); key_Word[24]=newString("struct"); key_Word[25]=newString("switch"); key_Word[26]=newString("typedef"); key_Word[27]=newString("union"); key_Word[28]=newString("unsigned"); key_Word[29]=newString("void"); key_Word[30]=newString("volatile"); key_Word[31]=newString("while"); } publicintiskey(Strings) { for(i=0;i<32;i++) if(s.equalsIgnoreCase(key_Word[i])) return1; return0; } } package词法分析; importjava.awt.BorderLayout; importjava.awt.Choice; importjava.awt.Color; importjava.awt.Font; importjava.awt.GridLayout; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.awt.event.ItemEvent; importjava.awt.event.ItemListener; importjava.awt.event.TextEvent; importjava.awt.event.TextListener; importjavax.swing.JButton; importjavax.swing.JDialog; importjavax.swing.JFrame; importjavax.swing.JLabel; importjavax.swing.JMenu; importjavax.swing.JMenuBar; importjavax.swing.JMenuItem; importjavax.swing.JPanel; importjavax.swing.JScrollPane; importjavax.swing.JTextArea; import词法分析.function; @SuppressWarnings("serial") publicclassLexical_FrameextendsJFrameimplementsActionListener,ItemListener,TextListener { JButtonsure=newJButton("是"); JButtonnot=newJButton("否"); JDialogDg; JMenuBartext_MenuBar; JMenumenFile,menHlep,edit; JMenuItemfile_open,file_Close,file_Exit,file_Save; JMenuItemcontact_Us,about; JMenuItemfont1,erro; Choicefont,color,style; JLabelf; Strings="",t; JFrameframe; inti=0,j,k=0; JTextAreafile=newJTextArea(); JTextAreafile1=newJTextArea(); JTextAreafile2=newJTextArea(); JTextAreafile10=newJTextArea(); JFrameframe1=newJFrame(); JTextAreafilee=newJTextArea(); JScrollPanescrollee=newJScrollPane(filee); JScrollPanescroll2=newJScrollPane(file10); JScrollPanescroll=newJScrollPane(file); JScrollPanescroll1=newJScrollPane(file2); publicLexical_Frame(inti) { } publicLexical_Frame() { frame=newJFrame(); frame.setResizable(false); frame.setTitle("词法分析程序"); file.setLineWrap(true); frame.add(scroll1,BorderLayout.CENTER); frame.add(scroll,BorderLayout.WEST); menFile=newJMenu("文件"); edit=newJMenu("编辑"); font1=newJMenuItem("字体"); menHlep=newJMenu("帮助"); file_open=newJMenuItem("打开"); erro=newJMenuItem("查看错误文件"); file_Close=newJMenuItem("关闭"); file_Exit=newJMenuItem("退出"); file_Save=newJMenuItem("保存"); contact_Us=newJMenuItem("返回源文件"); about=newJMenuItem("查看帮助"); text_MenuBar=newJMenuBar(); menFile.add(file_open); menFile.add(fi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理 词法分析 编译 原理 词法 分析