資源簡介
自己寫的編譯原理的實驗 語義分析 生成四元式(只實現了+、*、( )) 如果需要配套的實驗報告可以在我上傳的資源中找

代碼片段和文件信息
/*
?*?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? 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? if(code[i+1]?==?‘\\‘)?{
if(i+3? 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\Lexiconfr
?????文件????????5390??2012-12-18?10:31??lab3\bin\Parsing.class
?????文件?????????711??2012-12-18?10:31??lab3\bin\Parsingfr
?????文件?????????711??2012-12-18?10:31??lab3\bin\Parsingfr
?????文件?????????522??2012-12-18?10:31??lab3\bin\Parsingfr
?????文件????????8125??2012-12-18?10:31??lab3\bin\Parsingfr
?????文件????????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.xm
?????文件??????????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.xm
?????文件?????????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.xm
?????文件????????2315??2012-11-25?14:32??lab3\nbproject\project.properties
?????文件?????????513??2012-11-25?14:32??lab3\nbproject\project.xm
?????目錄???????????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\Lexiconfr
?????文件????????6607??2012-12-15?19:26??lab3\src\Parsing.java
?????文件????????8940??2012-12-16?15:32??lab3\src\Parsingfr
............此處省略3個文件信息
評論
共有 條評論