#include #include char scanin[300],scanout[300];
extern int testscan();
char scanin[300],scanout[300];
file *fin,*fout;//指向輸入輸出檔案的指標
int main()
}#include#include #include //定義關鍵字
#define keywordsum 36
char *keyword[keywordsum]=;
//定義單分界符
char singleword[50]="+-*\(){};'\"',:.'%^";
//定義雙分界符
char doubleword[10]="><=!&|";
extern char scanin[300],scanout[300];
extern file *fin,*fout;//指向輸入輸出檔案的指標
int testscan()
if((fout=fopen(scanout,"w"))==null)
ch=getc(fin);//取乙個字元
while(ch!=eof)//沒有到檔案結尾
if(isalpha(ch)||ch=='_')//如果ch是字母,則進行識別符號處理
token[j]='\0';//識別符號組合結束
//查關鍵字
int left=0,right=keywordsum-1,mid;
while(left<=right)
if(strcmp(keyword[mid],token)>0)
right=mid-1;
if(strcmp(keyword[mid],token)<0)
left=mid+1;
}if(left>right)
fprintf(fout,"%s\t%s\n","id",token);
}else if(isdigit(ch)) //如果是常數
while(isdigit(ch))
if(ch=='.')
while(isdigit(ch))
token[j]='\0';
if(flag==1)
else
fprintf(fout,"%s\t%s\n","num",token);
}else if(strchr(singleword,ch)>0)//能在singleword這個陣列裡查詢到ch
else if(strchr(doubleword,ch)>0) //在雙分裡查詢界符這個陣列裡查詢單詞的第乙個字元
else if(isalpha(ch))
else if(isalnum(ch))
else if(ch=='(')
else
}else if(token[0]=='&')
else
}else if(token[0]=='|')
else
}else
}else if(ch=='/')//進行注釋處理
while((ch!='*'||ch1!='/')&&ch1!=eof); //當ch=='*'&&ch1=='/' 或者 ch1為檔案結尾 就退出迴圈
ch=getc(fin);
if(ch=='\n')
number++;
}else if(ch=='/')
else
}else//以上情況都不是
}fclose(fin);
fclose(fout);
return es;
}
詞法分析程式
上課沒聽啥,一邊看書,一邊做的。基本上,老師的要求是實現了,能把乙個句子 也可以是一整個程式,但還不完善,由於時間急,很多情況來不及考慮了 中的單詞項分析出它是保留字,還是識別符號,運算子等等。開始是在控制台下做得,也比較純正 lex.h ifndef lex h define lex h incl...
詞法分析程式
include include void fenxi char c,char b void word char a void number char a int i 定義全域性變數i int s 1 用來記錄是否存在非法字元 main printf n void number char a 對數字字...
詞法分析程式
1.詞法分析程式的功能 輸入 所給文法的源程式字串。輸出 二元組構成的序列。其中 syn為單詞種別碼。token為存放的單詞自身字串。2.符號與種別碼的對照表 3.詞法規則 字母 a a b c y z 數字 a 1 2 3 4 5 6 7 8 9 s a sa sa0 整數常數 a 1 2 3 4...