编译原理 课程设计词法分析 2.docx

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

编译原理 课程设计词法分析 2.docx

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

编译原理 课程设计词法分析 2.docx

编译原理课程设计词法分析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(

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

当前位置:首页 > 工程科技 > 机械仪表

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

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