资源简介

自己写的编译原理的实验 语义分析 生成四元式(只实现了+、*、( )) 如果需要配套的实验报告可以在我上传的资源中找

资源截图

代码片段和文件信息

/*
 * To change this template choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * 
 * @author Administrator
 */
public class Lexicon {

private char[] code;// 存储字符串
private String[] keywords = {“if“ “else“ “for“ “while“ “do“ “return“ “int“ “double“ “float“ “char“ “string“ “true“ “false“};//关键字
private char[] operator1 = {‘=‘ ‘+‘ ‘-‘ ‘*‘ ‘/‘ ‘<‘ ‘>‘ ‘=‘ ‘‘ ‘{‘ ‘}‘ ‘(‘ ‘)‘};
private String[] operator2 = {“!=“ “>=“ “<=“ “==“};
private char[] escaped = {‘\‘‘ ‘\“‘ ‘\\‘ ‘b‘ ‘t‘ ‘n‘ ‘f‘ ‘r‘ ‘0‘};//转义字符
SymbolTable table = new SymbolTable();// 符号表
private String errorInfo = ““;//错误信息

public Lexicon(char[] code) {
this.code = code;
analysis();
}

// 分析字符串
public boolean analysis() {
int i = 0;
while (i < code.length) {
if (code[i] == ‘ ‘ || code[i] == ‘\n‘) {
i++;
continue;
}
if((i+1 while(code[i] != ‘\n‘) {
i++;
}
System.out.println(“注释被忽略“);
continue;
}
if(code[i] == ‘;‘) {
table.addSymbol(“tail“ “;“);
}
if (isDigit(code[i])) {// 判断数字
String num = ““;
boolean isDecimal = false;
boolean error = false;
while (isDigit(code[i])) {
num += code[i];
i++;
while(isLetter(code[i])) {//如果是以数字开头的标识符,则出错
error = true;
num += code[i];
i++;
}
if(code[i] == ‘.‘) {
num += ‘.‘;
i++;
if(!isDigit(code[i])) {
errorInfo += num + “附近出现错误,小数点后应该有数字\n“;
return false;
}
isDecimal = true;
}
}
if(error) {
errorInfo += num + “附近出现错误,标识符不能以数字开头\n“;
return false;
}
else if(isDecimal) {
table.addSymbol(“decimal“ num);
}
else {
table.addSymbol(“integer“ num);
}
continue;
}
if(isLetter(code[i])) {//判断标识符
String identifier = ““ + code[i];
i++;
while(isLetter(code[i]) || isDigit(code[i])) {
identifier += code[i];
i++;
}
if(!isKeyword(identifier)) {
table.addSymbol(“identifier“ identifier);
}
else {
table.addSymbol(“keyword“ identifier);
}
continue;
}
if(i+1 int checkOperator = checkOperator(code[i] code[i+1]);
if(checkOperator == 2) {
table.addSymbol(“operator“ ““+code[i]+code[i+1]);
i += 2;
continue;
}
if(checkOperator == 1) {
table.addSymbol(“operator“ ““+code[i]);
i++;
continue;
}
}
if(code[i] == ‘\‘‘) {//判断字符常数
if(i+2 < code.length) {
if(code[i+1] == ‘\\‘) {
if(i+3 < code.length) {
if(isEscaped(code[i+2]) && code[i+3] == ‘\‘‘) {
table.addSymbol(“character“ ““+code[i+1]+code[i+2]);
i += 4;
continue;
}
else {
errorInfo += ““ + code[i] + code[i+1] + code[i+2] + “附近有错误,字符未闭合或使用了不正确的转义字符\n“;
return 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-12-15 17:23  lab3\
     文件         232  2012-11-25 14:43  lab3\.classpath
     文件         379  2012-11-27 19:47  lab3\.project
     目录           0  2012-12-18 10:31  lab3\bin\
     文件         801  2012-12-18 10:31  lab3\bin\ActionDetail.class
     文件        5184  2012-12-18 10:31  lab3\bin\Lexicon.class
     文件        5610  2012-11-25 14:43  lab3\bin\Lexiconframe.form
     文件        5390  2012-12-18 10:31  lab3\bin\Parsing.class
     文件         711  2012-12-18 10:31  lab3\bin\Parsingframe$1.class
     文件         711  2012-12-18 10:31  lab3\bin\Parsingframe$2.class
     文件         522  2012-12-18 10:31  lab3\bin\Parsingframe$3.class
     文件        8125  2012-12-18 10:31  lab3\bin\Parsingframe.class
     文件        2800  2012-12-18 10:31  lab3\bin\ParsingSem.class
     文件        1451  2012-12-18 10:31  lab3\bin\ParsingSeq.class
     文件         342  2012-12-18 10:31  lab3\bin\Quadruple.class
     文件        1782  2012-12-18 10:31  lab3\bin\SymbolTable.class
     文件        3710  2012-11-25 14:32  lab3\build.xml
     文件          85  2012-11-25 14:32  lab3\manifest.mf
     目录           0  2012-12-15 17:23  lab3\nbproject\
     文件       78019  2012-11-25 14:32  lab3\nbproject\build-impl.xml
     文件         475  2012-11-25 14:32  lab3\nbproject\genfiles.properties
     目录           0  2012-12-15 17:23  lab3\nbproject\private\
     文件         139  2012-11-25 14:32  lab3\nbproject\private\private.properties
     文件         230  2012-11-25 14:43  lab3\nbproject\private\private.xml
     文件        2315  2012-11-25 14:32  lab3\nbproject\project.properties
     文件         513  2012-11-25 14:32  lab3\nbproject\project.xml
     目录           0  2012-12-15 18:35  lab3\src\
     文件        5524  2012-12-02 14:26  lab3\src\Lexicon.java
     文件        5610  2012-11-25 14:43  lab3\src\Lexiconframe.form
     文件        6607  2012-12-15 19:26  lab3\src\Parsing.java
     文件        8940  2012-12-16 15:32  lab3\src\Parsingframe.java
............此处省略3个文件信息

评论

共有 条评论