資源簡介
擴充pl\0編譯器設計之詞法分析程序
內嵌函數:
void clearToken(); //清空token字符數組
int isSpace(); //空格
int isNewline(); //換行符
int isTab(); //Tab
int isLetter(); //字母
int isDigit(); //數字
int isColon(); //冒號 :
int isComma(); //逗號 ,
int isSemi(); //分號 ;
int isEqu(); //等號 =
int isPlus(); //加號 +
int isMinus(); //減號 -
int isDivi(); //除號 /
int isStar(); //乘號 *
int isLpar(); //左括號 (
int isRpar(); //右括號 )
int isLbrack(); //左中括號 [
int isRbrack(); //右中括號 ]
int isLbrace(); //左大括號 {
int isRbrace(); //右大括號 }
int isLss(); //小于號
int isPeriod(); //點號 .
int isQmark(); //單引號 '
int isDqmark(); //雙引號 "
int isStringElement(); //字符串合法字符,ASCII碼值為32,33,35-126的字符
void catToken(); //每次調用前把當前ch中的字符與token字符數組中的字符串聯結
void retract(); //將讀字符指針后退一個字符
void reserve(); //保留字
void lexical_error(); //錯誤處理過程

代碼片段和文件信息
#include
#include
#include
#define?MAX?100?//最大字符串長度
#define?RESERVE_NUM?21?//保留字個數
FILE?*fsrc?*fobj;?//詞法分析源文件與分析結果保存文件
char?ch;?//讀取當前字符到ch
char?token[MAX];?//存放單詞的字符串
int?num?=?1;?//存放當前判斷單詞個數
char?symbol[15];?//存放當前所識別的單詞的類型
void?start();?//啟動程序
int?getsym();?//詞法分析子程序
void?clearToken();?//清空token字符數組
int?isSpace();?//空格
int?isNewline();?//換行符
int?isTab();?//Tab
int?isLetter();?//字母
int?isDigit();?//數字
int?isColon();?//冒號?:
int?isComma();?//逗號?
int?isSemi();?//分號?;
int?isEqu();?//等號?=
int?isPlus();?//加號?+
int?isMinus();?//減號?-
int?isDivi();?//除號?/
int?isStar();?//乘號?*
int?isLpar();?//左括號?(
int?isRpar();?//右括號?)
int?isLbrack();?//左中括號?[
int?isRbrack();?//右中括號?]
int?isLbrace();?//左大括號?{
int?isRbrace();?//右大括號?}
int?isLss();?//小于號?<
int?isGre();?//大于號?>
int?isPeriod();?//點號?.
int?isQmark();?//單引號?‘
int?isDqmark();?//雙引號?“
int?isStringElement();?//字符串合法字符,ASCII碼值為323335-126的字符
void?catToken();?//每次調用前把當前ch中的字符與token字符數組中的字符串聯結
void?retract();?//將讀字符指針后退一個字符
void?reserve();?//保留字
void?lexical_error();?//錯誤處理過程
void?clean_filename(char*);?//特殊系統文件路徑處理
char?reserves[RESERVE_NUM][15]?=?{
“array“?????“begin“?????“by“
“char“??????“const“?????“do“
“else“??????“end“???????“for“
“function“??“if“????????“integer“
“of“????????“procedure“?“read“
“real“??????“then“??????“to“
“var“???????“while“?????“write“
};
char?reserves_tk[RESERVE_NUM][15]?=?{
“ARRAYTK“???“BEGINTK“???“BYTK“
“CHARTK“????“CONSTTK“???“DOTK“
“ELSETK“????“ENDTK“?????“FORTK“
“FUNCTK“????“IFTK“??????“INTTK“
“OFTK“??????“PROCETK“???“READTK“
“FLOATTK“???“THENTK“????“TOTK“
“VARTK“?????“WHILETK“???“WRITETK“
};
int?main(){
start();
return?0;
}
void?start(){
char?filename[100];
//獲取詞法分析源文件
printf(“Please?type?in?the?file?name?to?analyse:\n“);
gets(filename);
clean_filename(filename);
while((fsrc?=?fopen(filename?“r“))?==?NULL){
printf(“Open?file?%s?failed!\nPlease?type?in?the?filename?again:\n“?filename);
gets(filename);
clean_filename(filename);
}
//保存分析結果的文件
/* printf(“Please?type?in?the?file?name?to?save?result:\n“);
gets(filename);
while((fobj?=?fopen(filename?“w“))?==?NULL){
printf(“Open?file?%s?failed!\nPlease?type?in?the?filename?again:\n“?filename);
gets(filename);
}
*/
if((fobj?=?fopen(“11061156_token.txt“?“w“))?==?NULL){
printf(“Open?file?11061156_token.txt?failed!\n“);
exit(1);
}
//對文件中的所有詞進行詞法分析
while(!feof(fsrc)){
ch?=?fgetc(fsrc);
getsym();
}
printf(“The?result?has?been?saved?into?11061156_token.txt.\n“);
fclose(fobj);
fclose(fsrc);
}
int?getsym(){?//詞法分析子程序
clearToken();
while(isSpace()?||?isNewline()?||?isTab())?//讀取字符,跳過空格、換行和Tab
ch?=?fgetc(fsrc);
if(isLetter()){?//判斷當前字符是否是一個字母
while(isLetter()?||?isDigit()){?//將字符拼接成字符串
catToken();?
ch?=?fgetc(fsrc);
}
retract();?//指針后退一個字符
reserve();
fprintf(fobj?“%
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2013-11-21?19:05??LexicalAnalysis\
?????文件?????????526??2013-11-14?19:54??LexicalAnalysis\11061156_token.txt
?????目錄???????????0??2013-11-16?23:01??LexicalAnalysis\Debug\
?????文件??????172145??2013-11-16?23:01??LexicalAnalysis\Debug\LexicalAnalysis.exe
?????文件??????191968??2013-11-16?23:01??LexicalAnalysis\Debug\LexicalAnalysis.ilk
?????文件???????37714??2013-11-16?23:01??LexicalAnalysis\Debug\LexicalAnalysis.obj
?????文件??????190920??2013-11-16?23:01??LexicalAnalysis\Debug\LexicalAnalysis.pch
?????文件??????459776??2013-11-16?23:01??LexicalAnalysis\Debug\LexicalAnalysis.pdb
?????文件???????33792??2013-11-16?23:01??LexicalAnalysis\Debug\vc60.idb
?????文件???????53248??2013-11-16?23:01??LexicalAnalysis\Debug\vc60.pdb
?????文件????????9469??2013-11-16?23:01??LexicalAnalysis\LexicalAnalysis.c
?????文件????????4390??2013-11-13?00:21??LexicalAnalysis\LexicalAnalysis.dsp
?????文件?????????555??2013-11-12?20:24??LexicalAnalysis\LexicalAnalysis.dsw
?????文件???????58368??2013-11-21?19:05??LexicalAnalysis\LexicalAnalysis.ncb
?????文件???????48640??2013-11-21?19:05??LexicalAnalysis\LexicalAnalysis.opt
?????文件?????????264??2013-11-16?23:01??LexicalAnalysis\LexicalAnalysis.plg
?????目錄???????????0??2013-11-14?19:53??LexicalAnalysis\Release\
?????文件???????36864??2013-11-14?19:30??LexicalAnalysis\Release\LexicalAnalysis.exe
?????文件???????23998??2013-11-14?19:30??LexicalAnalysis\Release\LexicalAnalysis.obj
?????文件??????199196??2013-11-14?19:30??LexicalAnalysis\Release\LexicalAnalysis.pch
?????文件???????25600??2013-11-14?19:30??LexicalAnalysis\Release\vc60.idb
?????文件?????????140??2013-11-14?18:44??LexicalAnalysis\test.txt
- 上一篇:小四軸源碼
- 下一篇:基于51單片機的汽車防撞系統設計
評論
共有 條評論