資源簡介
利用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?
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.xm
?????文件??????????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\me
?????文件??????????39??2010-10-17?22:47??C語言詞法分析器\MyAnalysis\bin\me
?????目錄???????????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個文件信息
- 上一篇:韻達物流管理系統
- 下一篇:JSP+SQL水費管理系統
評論
共有 條評論