編譯原理詞法分析程式

2021-09-09 06:31:12 字數 1821 閱讀 7796

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

}

編譯原理詞法分析程式

include include char prog 80 token 8 char ch int syn,p,m,n,sum char rwtab 6 void scaner token m 0 p 回退乙個字元 syn 10 for n 0 n 6 n if strcmp token,rwtab ...

編譯原理詞法分析

編譯原理實驗一 詞法分析練習 include include include define tokenmax 100 define progmax 1000 define k esc 27 void analytics 詞法分析 void scanner 輸入掃瞄 bool isletter cha...

詞法分析(編譯原理)

詞法分析 英語 lexical analysis 是電腦科學中將字串行轉換為單詞 token 序列的過程。進行詞法分析的程式或者函式叫作詞法分析器 lexical analyzer,簡稱lexer 也叫掃瞄器 scanner 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱...