您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 编译原理词法分析器java
编译原理实验报告计算机与信息学院第1页共14页实验一词法分析器的设计一、实验目的1.理解词法分析器的任务和输出形式2.理解扫描器的工作原理3.掌握状态转换图的绘制以及单词的识别技术4.掌握词法分析器的设计过程,能够使用某种高级语言实现一个词法分析器二、实验环境Myeclipse三、实验要求给出一个简单的词法语言规则描述,其中:1开头的种别码为关键词,2开头的为算符,3开头的为界符,4开头的为标识符,5开头的为常数,标识符为字母开头,以字母和数字组成的任意符号串,常数为整数,即以数字组成的符号串。四、实验难点1.对整数的二进制转换,以及对指针的操作2.标识符的设置五、实验代码1.ciFa.Javapackagecom.yaoer.test1;importjavax.swing.*;importjavax.swing.border.TitledBorder;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;@SuppressWarnings(serial)publicclassciFaextendsJFrame{privateJButtonjbtShow=newJButton(进行词法分析);//按钮privateJTextAreajta=newJTextArea();//输入文本框privateJTextAreajtaOut=newJTextArea();//输出文本框privateJPaneljpl=newJPanel();privateStringintput=;privateStringoutput=;privatecompilercomp=newcompiler();编译原理实验报告计算机与信息学院第2页共14页/***@paramargs*/publicstaticvoidmain(String[]args){ciFaframe=newciFa();frame.setTitle(词法分析器);//frame.setLocationRelativeTo(frame);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(500,400);frame.setVisible(true);}publicciFa(){jta.setWrapStyleWord(true);jta.setLineWrap(true);jtaOut.setWrapStyleWord(true);jtaOut.setLineWrap(true);jtaOut.setEditable(false);JScrollPanescrollPane=newJScrollPane(jta);JScrollPanescrollPane2=newJScrollPane(jtaOut);scrollPane.setPreferredSize(newDimension(300,300));scrollPane2.setPreferredSize(newDimension(300,300));jtaOut.setBorder(newTitledBorder(词法分析结果));jta.setBorder(newTitledBorder(请在这输入));jpl.setLayout(newGridLayout(2,2));jpl.add(jta);jpl.add(jtaOut);add(jbtShow,BorderLayout.SOUTH);add(jpl);jbtShow.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){intput=jta.getText();output=comp.computerComp(intput);jtaOut.append(output);}});编译原理实验报告计算机与信息学院第3页共14页}}2.compiler.Javapackagecom.yaoer.test1;publicclasscompiler{publicStringcomputerComp(Stringstr){Stringoutput=;intindex=0;intk=0;while(indexstr.length()){if(isJieFu(str.charAt(index))!=-1){//判断界符output+=((30+isJieFu(str.charAt(index))++str.charAt(index)+界符));index++;}elseif(isMath(str.charAt(index))){//判断常数intindex1=index;output+=(();Stringsub;Stringresult;while(isMath(str.charAt(index))){output+=(str.charAt(index));index++;if(index=str.length()){if(str.charAt(index1)=='0'){if(index1+1=str.length()){sub=str.substring(index1,index);result=Zhuan(sub);output+=(+result+数字));}else{if(isMath(str.charAt(index1+1))){output+=(非法字符));}else{sub=str.substring(index1,index);result=Zhuan(sub);output+=(+result+数字));}}}else{sub=str.substring(index1,index);result=Zhuan(sub);output+=(+result+数字));编译原理实验报告计算机与信息学院第4页共14页}returnoutput;}}if(isLetter(str.charAt(index))){if(str.charAt(index)==''||str.charAt(index)=='\n'){//空格或者回车处理index++;}while((!isMath(str.charAt(index)))||(isLetter(str.charAt(index)))){output+=(str.charAt(index));index++;if(index=str.length()){output+=(非标识符));returnoutput;}}output+=(非法字符));}else{if(str.charAt(index1)=='0'){if(isMath(str.charAt(index1+1))){output+=(非法字符));}else{sub=str.substring(index1,index);result=Zhuan(sub);output+=(+result+数字));}}else{sub=str.substring(index1,index);result=Zhuan(sub);output+=(+result+数字));}}}elseif(isLetter(str.charAt(index))){//标识符判断inti=index;Stringsub;while(isLetter(str.charAt(index))||isMath(str.charAt(index))){index++;if(index=str.length()){//System.out.println(index);sub=str.substring(i,index);if(isKeyword(sub)!=0){if(isKeyword(sub)=10){编译原理实验报告计算机与信息学院第5页共14页output+=((+1+isKeyword(sub)++sub+关键字));}else{output+=((+10+isKeyword(sub)++sub+关键字));}}else{output+=((+sub+标识符));}returnoutput;}}sub=str.substring(i,index);//判断是不是关键字if(isKeyword(sub)!=0){if(isKeyword(sub)=10){output+=((+1+isKeyword(sub)++sub+关键字));}else{output+=((+10+isKeyword(sub)++sub+关键字));}}else{output+=((+sub+标识符));}}elseif(isCompu(str.charAt(index))!=0){if(index+1=str.length()){if(str.charAt(index)=='&'||str.charAt(index)=='|'){output+=((+str.charAt(index)+非法字符));index++;}else{if(isCompu(str.charAt(index))=8){output+=((+20+isCompu(str.charAt(index))++str.charAt(index)+运算符));}elseif(str.charAt(index)=='!'){output+=((218+str.charAt(index)+运算符));}index++;}}else{if(isCompu(str.charAt(index+1))==0){编译原理实验报告计算机与信息学院第6页共14页if(str.charAt(index)=='&'||str.charAt(index)=='|'){output+=((+str.charAt(index)+非法字符));index++;}else{if(isCompu(str.charAt(index))=8){output+=((+20+isCompu(str.charAt(index))++str.charAt(index)+运算符));}elseif(str.charAt(index)=='!'){output+=((+218+str.charAt(index)+运算符));}index++;}}else{if(index+2=str.length()){if(isCompu(str.charAt(index+1))!=0){if(str.charAt(index)=='='){if(str.charAt(index+1)=='='){output+=((+210+str.charAt(index)+str.charAt(index+1)+运算符));index++;index++;}else{output+=((+str.charAt(index)+str.charAt(index+1)+非法字符));index++;index++;}}elseif(str.charAt(index)==''){switch(str.charAt(index+1)){case'=':output+=((+209+str.charAt(index)+str.charAt(index+1)+运算符));index++;index++;break;case'':output+=((215+str.charAt(index)+str.charAt(index+1)+运算符));index++;index++;break;编译原理实验报告计算机与信息学院第7页共14页case'':output+=((211+str.charAt(index)+str.charAt(index+1)+运算符));index++;index++;break;defaul
本文标题:编译原理词法分析器java
链接地址:https://www.777doc.com/doc-2069004 .html