编译原理 词法分析.docx

上传人:b****2 文档编号:24414247 上传时间:2023-05-27 格式:DOCX 页数:28 大小:20.15KB
下载 相关 举报
编译原理 词法分析.docx_第1页
第1页 / 共28页
编译原理 词法分析.docx_第2页
第2页 / 共28页
编译原理 词法分析.docx_第3页
第3页 / 共28页
编译原理 词法分析.docx_第4页
第4页 / 共28页
编译原理 词法分析.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

编译原理 词法分析.docx

《编译原理 词法分析.docx》由会员分享,可在线阅读,更多相关《编译原理 词法分析.docx(28页珍藏版)》请在冰豆网上搜索。

编译原理 词法分析.docx

编译原理词法分析

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;

Stacke=newStack();//()括号的栈

Stacke1=newStack();//[]的栈

Stacke2=newStack();//{}的栈

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=48&&str.charAt(i)<=57)||str.charAt(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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1