詞法分析程式

2021-09-09 06:26:57 字數 1821 閱讀 2352

#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...