• 大小: 136KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-10-15
  • 语言: Java
  • 标签: 编译原理  

资源简介

利用Java编写简单的C语言词法分析器,实现编译原理课程的第一部分:词法分析器

资源截图

代码片段和文件信息

package com.ant.model;

public class MyModel {
private String source;
private String target;
private StringBuffer SBSource;
private StringBuffer SBTarget = new StringBuffer();
private StringBuffer lexBuf = new StringBuffer();//用于存储预读的词素,进行判断分析
private String lexStr;
private int state = 0;//表明当前所处状态
private int start = 0;//表明状态转化图的出示状态
private char c;
private int begin = 0;//类似指针,表明读取字符所在位置
private int forward = 0;//类似指针,用于表明向前搜索的位置
private SymTable sym_Table = new SymTable();//符号表,用于存放预定义的关键字信息,及分析过程中新添加的标识符
private int flags = 1;//用于标记终态是否需要指针后移一位,0,需要;1,不需要
public MyModel() {

}
public MyModel(String source){
//接受源代码,并以StringBuffer的形式存储
this.source = source;
SBSource = new StringBuffer(source);
analysis();
}
public void analysis(){
//对源代码进行分析
System.out.println(source.length());
while(begin < source.length()){

SBTarget.append(nextToken() +‘\n‘);
lexBuf.delete(0 lexBuf.length());
start = state = 0;
System.out.println(begin + “w“);
}
System.out.println(begin);
System.out.println(source.length());
System.out.println(forward);

}

public String nextToken(){
//词法分析器的核心代码,根据状态转化图,对每一个词素进行识别,并将记号及其属性返回
/**
 * case 0~16:完成对运算符的识别
 * case 17~19:完成对标识符的识别,并通过查找符号表,实现关键字的判断
 */
while(true){
switch(state){
case 0: c = nextChar();
if(c == ‘ ‘||c == ‘\t‘|| c == ‘\n‘){
state = 0;
forward = ++begin;
System.out.println(forward);
}
else{
switch(c){
case ‘<‘: state = 13; break;
case ‘>‘: state = 15; break;

case ‘-‘: state = 3; break;
case ‘!‘: state = 4; break;
case ‘+‘: state = 5; break;
case ‘*‘: state = 6; break;
case ‘/‘: state = 7; break;
case ‘%‘: state = 8; break;
case ‘=‘: state = 9; break;
case ‘&‘: state = 10; break;
case ‘^‘: state = 11; break;
case ‘|‘: state = 12; break;

case ‘#‘:
case ‘(‘: 
case ‘)‘: 
case ‘[‘: 
case ‘]‘:
case ‘{‘:
case ‘}‘:
case ‘“‘:
case ‘.‘: 
case ‘~‘: 
case ‘?‘: 
case ‘:‘:
case ‘;‘:
case ‘‘: state = 1; break;

default: state = fail();
}
}
break;
case 1: 
return final_state();
case 2:
flags = 0;
return final_state();
case 3: 
lexBuf.append(c);
forward++;
c = nextChar();
    switch(c){
    case ‘>‘: 
    case ‘-‘: 
    case ‘=‘: state = 1;break;
    default: state = 2;
    }
    break;
case 4:
lexBuf.append(c);
forward++;
c = nextChar();
    if(c == ‘=‘) state = 1;
    else state = 2;
    break;
case 5:
lexBuf.append(c);
forward++;
c = nextChar();
    switch(c){
    case ‘+‘: 
    case ‘=‘: state = 1;break;
    default: state = 2;
    }
    break;
case 6: 
lexBuf.append(c);
forward++;
c = nextChar();

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2010-10-17 23:29  C语言词法分析器\
     文件       11654  2010-10-17 22:49  C语言词法分析器\analysis.jar
     目录           0  2010-10-17 23:29  C语言词法分析器\MyAnalysis\
     文件         386  2010-10-17 22:47  C语言词法分析器\MyAnalysis\.classpath
     文件        1043  2010-10-17 22:47  C语言词法分析器\MyAnalysis\.project
     目录           0  2010-10-17 23:29  C语言词法分析器\MyAnalysis\.settings\
     文件         493  2010-10-17 22:46  C语言词法分析器\MyAnalysis\.settings\.jsdtscope
     文件         629  2010-10-14 20:26  C语言词法分析器\MyAnalysis\.settings\org.eclipse.jdt.core.prefs
     文件         240  2010-10-17 22:47  C语言词法分析器\MyAnalysis\.settings\org.eclipse.wst.common.component
     文件         229  2010-10-17 22:47  C语言词法分析器\MyAnalysis\.settings\org.eclipse.wst.common.project.facet.core.xml
     文件          49  2010-10-17 22:46  C语言词法分析器\MyAnalysis\.settings\org.eclipse.wst.jsdt.ui.superType.container
     文件           6  2010-10-17 22:46  C语言词法分析器\MyAnalysis\.settings\org.eclipse.wst.jsdt.ui.superType.name
     目录           0  2010-10-17 23:29  C语言词法分析器\MyAnalysis\bin\
     目录           0  2010-10-17 23:29  C语言词法分析器\MyAnalysis\bin\com\
     目录           0  2010-10-17 23:29  C语言词法分析器\MyAnalysis\bin\com\ant\
     目录           0  2010-10-17 23:29  C语言词法分析器\MyAnalysis\bin\com\ant\model\
     文件        6793  2010-10-17 21:59  C语言词法分析器\MyAnalysis\bin\com\ant\model\MyModel.class
     文件        1376  2010-10-17 15:21  C语言词法分析器\MyAnalysis\bin\com\ant\model\SymTable$Symbol.class
     文件        4589  2010-10-17 15:21  C语言词法分析器\MyAnalysis\bin\com\ant\model\SymTable.class
     目录           0  2010-10-17 23:29  C语言词法分析器\MyAnalysis\bin\com\ant\viewer\
     文件         724  2010-10-15 07:30  C语言词法分析器\MyAnalysis\bin\com\ant\viewer\MyAnalyor$1.class
     文件         723  2010-10-15 07:30  C语言词法分析器\MyAnalysis\bin\com\ant\viewer\MyAnalyor$2.class
     文件         746  2010-10-15 07:30  C语言词法分析器\MyAnalysis\bin\com\ant\viewer\MyAnalyor$3.class
     文件        3377  2010-10-15 07:30  C语言词法分析器\MyAnalysis\bin\com\ant\viewer\MyAnalyor.class
     目录           0  2010-10-17 23:29  C语言词法分析器\MyAnalysis\bin\meta-INF\
     文件          39  2010-10-17 22:47  C语言词法分析器\MyAnalysis\bin\meta-INF\MANIFEST.MF
     目录           0  2010-10-17 23:29  C语言词法分析器\MyAnalysis\src\
     目录           0  2010-10-17 23:29  C语言词法分析器\MyAnalysis\src\com\
     目录           0  2010-10-17 23:29  C语言词法分析器\MyAnalysis\src\com\ant\
     目录           0  2010-10-17 23:29  C语言词法分析器\MyAnalysis\src\com\ant\model\
     文件        8680  2010-10-17 21:59  C语言词法分析器\MyAnalysis\src\com\ant\model\MyModel.java
............此处省略6个文件信息

评论

共有 条评论