#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 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱...