c语言词法分析程序实验报告,实验一词法分析程序设计与实现
實驗一?詞法分析程序設計與實現
一、實驗目的:
加深對詞法分析器的工作過程的理解;加強對詞法分析方法的掌握;能夠采用一種編程語言實現簡單的詞法分析程序;能夠使用自己編寫的分析程序對簡單的程序段進行詞法分析。
二、實驗內容:
自定義一種程序設計語言,或者選擇已有的一種高級語言(C語言),編制它的詞法分析程序。詞法分析程序的實現可以采用任何一種編程工具。
三、實驗要求:
1. 對單詞的構詞規則有明確的定義;
2. 編寫的分析程序能夠正確識別源程序中的單詞符號;
3. 識別出的單詞以的形式保存在符號表中;
4. 詞法分析中源程序的輸入以.c格式,分析后的符號表保存在.txt文件中。
5. *對于源程序中的詞法錯誤,能夠做出簡單的錯誤處理,給出簡單的錯誤提示,保證順利完成整個源程序的詞法分析;
6. 實驗報告要求用自動機或者文法的形式對詞法定義做出詳細說明,說明詞法分析程序的工作過程,說明錯誤處理的實現*。
四、實驗學時:6學時
五、實驗步驟:
1. 定義目標語言的可用符號表和構詞規則;
2. 依次讀入源程序符號,對源程序進行單詞切分和識別,直到源程序結束;
3.
對正確的單詞,按照它的種別以的形式保存在符號表中;
4. *對不正確的單詞,做出錯誤處理*。
六、選作實驗
學生可以根據自身的情況完善詞法分析程序的錯誤處理功能,如對錯誤的單詞給出準確的位置和錯誤類型提示。
七、作業提交時間
第8周實驗課結束后提交詞法分析程序(amy_lcx@126.com)。
八、提示
1. char Scanin[100],Scanout[100]; //用于接收輸入輸出文件名
FILE *fin,*fout; //用于指向輸入輸出文件的指針
2. //下面定義保留,為簡化程序,使用字符指針數組保存所有保留字。
//如果想增加保留字,可繼續添加,并修改保留字數目
#define keywordSum?8
char *keyword[keywordSum]={
"if","else","for","while","do","int","read","write"};
3. //下面定義純單分界符,如需要可添加
char singleword[50]="+-*(){};,:";
4. //下面定義雙分界符的首字符
char doubleword[10]="><=!";
5. ?scanf("%s",Scanin);
printf("請輸入詞法分析輸出文件名(包括路徑):");
scanf("%s",Scanout);
6. ?if
((fin=fopen(Scanin,"r"))==NULL) //判斷輸入文件名是否正確
{
printf("\n打開詞法分析輸入文件出錯!\n");
return(1);//輸入文件出錯返回錯誤代碼1
}
if
((fout=fopen(Scanout,"w"))==NULL) //判斷輸出文件名是否正確
{
printf("\n創建詞法分析輸出文件出錯!\n");
return(2); //輸出文件出錯返回錯誤代碼2
}
7.?ch=getc(fin);//讀取文件里的一個字符
8.?isalpha(ch)
//字母判斷函數
isalnum(ch)) //數字判斷函數
strcmp(token,keyword[n]) //串比較
fprintf(fout,"%s\t%s\n","ID",token);?//輸出標識符符號到fout指定的文件
strchr(singleword,ch)?//聲明: char *strchr(
const char *string, int c );
//在字符串string中搜索字符c,若成功則返回一個指向該字符第一次出現的位置,否則返回NULL
//這個例子中的變量x的值為5:char string[]="hello"; char *p; int x;
p=strchr(string,'o'); x=p-string+1;
網上下載c語言庫函數查詢工具。
總結
以上是生活随笔為你收集整理的c语言词法分析程序实验报告,实验一词法分析程序设计与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 字符串 if,C语言用if(st
- 下一篇: c语言按行存储数据库,C语言实现按行读写