编译原理词法分析器JAVA
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
while(index<str.length())
{
if(isJieFu(str.charAt(index))!=-1){ //判断界符
output+=("(
30"+isJieFu(str.charAt(index))+"
"+str.charAt(index)+" 界符)");
index++;
}else if(isMath(str.charAt(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)+" 运算符)");
} }else{
output+=("( "+sub+" 标识符)"); } return output; } } sub = str.substring(i, index); //判断是不是关键字 if(isKeyword(sub)!=0){ if(isKeyword(sub)>=10){ output+=("( "+" 1"+isKeyword(sub)+" "+sub+" 关键字)"); }else{ output+=("( "+" 10"+isKeyword(sub)+" "+sub+" 关 键
第 5 页 共 14 页
编译原理实验报告
计算机与信息学院
if(str.charAt(index)=='&'||str.charAt(index)=='|'){ output+=("("+str.charAt(index)+" 非法字符)"); index++;
}else{ if(isCompu(str.charAt(index))<=8) { output+=("("+"
while((!isMath(str.charAt(index)))||(isLetter(str.charAt(index)))){ output+=(str.charAt(index)); index++; if(index>=str.length()) { output+=(" 非标识符)"); return output; }
} 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+" 数字)"); } } }else if(isLetter(str.charAt(index))){ //标识符判断 int i=index; String sub; 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){
private JButton jbtShow = new JButton("进行词法分析");//按钮 private JTextArea jta = new JTextArea();//输入文本框 private JTextArea jtaOut = new JTextArea();//输出文本框 private JPanel jpl=new JPanel(); private String intput =""; private String output =""; private compiler comp = new compiler();
四、实验难点
1. 对整数的二进制转换,以及对指针的操作
2. 标识符的设置
五、实验代码 1. ciFa.Java
package com.yaoer.test1;
import javax.swing.*; import javax.swing.border.TitledBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @SuppressWarnings("serial") public class ciFa extends JFrame{
public void actionPerformed(ActionEvent e) {
intput = jta.getText(); output=comp.computerComp(intput); jtaOut.append(output); } });
第 2 页 共 14 页
编译原理实验报告
if(isKeyword(sub)>=10){
第 4 页 共 14 页
编译原理实验报告
计算机与信息学院
键字)"); 关键字)");
字)");
output+=("( "+" 1"+isKeyword(sub)+" "+sub+" 关
}else{ output+=("( "+" 10"+isKeyword(sub)+" "+sub+"
jtaOut.setWrapStyleWord(true); jtaOut.setLineWrap(true); jtaOut.setEditable(false);
JScrollPane scrollPane = new JScrollPane(jta); JScrollPane scrollPane2 = new JScrollPane(jtaOut);
}
}else{ output+=("("+sub+" 标识符)");
} }else if(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))+"
20"+isCompu(str.charAt(index))+" "+str.charAt(index)+" 运算符)"); }else if(str.charAt(index)=='!'){ output+=("("+" 218"+str.charAt(index)+" 运 算
符)"); } index++;
计算机与信息学院
}
}
2. compiler.Java
package com.yaoer.test1;
public class compiler {
public String computerComp(String str)
{
String output="";
int index=0;
源自文库
int k = 0;
int index1=index;
output+=("( ");
String sub;
String result;
while(isMath(str.charAt(index))){
output+=(str.charAt(index));
index++;
if(index>=str.length()){
jpl.setLayout(new GridLayout(2,2)); jpl.add(jta); jpl.add(jtaOut); add(jbtShow,BorderLayout.SOUTH); add(jpl); jbtShow.addActionListener(new ActionListener() {
scrollPane.setPreferredSize(new Dimension(300,300)); scrollPane2.setPreferredSize(new Dimension(300,300));
jtaOut.setBorder(new TitledBorder("词法分析结果")); jta.setBorder(new TitledBorder("请在这输入"));
第 1 页 共 14 页
编译原理实验报告
计算机与信息学院
/** * @param args */
public static void main(String[] args) {
ciFa frame = new ciFa(); frame.setTitle("词法分析器"); //frame.setLocationRelativeTo(frame); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 400); frame.setVisible(true); } public ciFa() { jta.setWrapStyleWord(true); jta.setLineWrap(true);
第 3 页 共 14 页
编译原理实验报告
计算机与信息学院
或者回车处理
} return output; } } if(isLetter(str.charAt(index))){ if(str.charAt(index)==' '||str.charAt(index)=='\n'){// 空 格
index++; }
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))){
编译原理实验报告
计算机与信息学院
实验一 词法分析器的设计
一、实验目的
1. 理解词法分析器的任务和输出形式 2. 理解扫描器的工作原理 3. 掌握状态转换图的绘制以及单词的识别技术 4. 掌握词法分析器的设计过程,能够使用某种高级语言实现一个词法分析器
二、实验环境
Myeclipse
三、实验要求
给出一个简单的词法语言规则描述,其中:1 开头的种别码为关键词,2 开头的为算符, 3 开头的为界符,4 开头的为标识符,5 开头的为常数,标识符为字母开头,以字母和数字 组成的任意符号串,常数为整数,即以数字组成的符号串。
output+=(" 非法字符)"); }
else{
sub =str.substring(index1, index);
result = Zhuan(sub);
output+=(" "+result+" 数字)");
}
}
}else{ sub =str.substring(index1, index); result = Zhuan(sub); output+=(" "+result+" 数字)");
"+str.charAt(index)+" 运算符)"); }else if(str.charAt(index)=='!'){ output+=("( 218 "+str.charAt(index)+" 运算符)"); }
index++; } }else{ if(isCompu(str.charAt(index+1))==0){