實驗一詞法分析實驗報告


一、        實驗目的

(1)    理解詞法分析在編譯程序中的作用。

(2)    加深對有窮自動機模型的理解。

(3)    掌握詞法分析程序的實現方法。

(4)    用C語言對一個簡單語言的子集編制一個一遍掃錨的編譯理解,掌握編譯程序的實現方法和技術。

二、        實驗內容和要求

1,待分析的簡單語言的詞法

2,各種單詞符號對應的種別碼。

3,詞法分析程序的功能(輸入,輸出)。

三、        實驗方法、步驟及結果測試

1.      源程序名:壓縮包文件(rarzip)中源程序名:CIFENXI.c

可執行程序名:CIFAFEN.exe

 

   2.原理分析及流程圖

  主要程序段及其解釋:

  1 # include<stdio.h>
  2 # include<stdlib.h>
  3 # include<string.h>
  4 
  5 int panduan(char tmp[])
  6 {
  7 char b[6][10] = {"begin", "if", "then", "while", "do", "end", };
  8 int k = 0;
  9 
 10 while(k < 6)    // 臨時變量tmp 與 字符串b[k] 進行比較
 11 {
 12 if(strcmp(tmp, b[k]) == 0)
 13 {
 14 printf("<%s, %d>\n", tmp, k+1);
 15 return 0;
 16 }
 17 k++;
 18 }
 19 printf("<%s, 10>\n", tmp);
 20 
 21 return 0;
 22 }
 23 
 24 void cifafenxi(char a[])
 25 {
 26 int i = 0, j = 0;
 27 char tmp[10];
 28 int flag = 0;
 29 
 30 while(a[i] != '\0')
 31 {
 32 if(a[i] >= 'a' && a[i] <= 'z')    // 判斷標識符
 33 {
 34 tmp[j] = a[i];
 35 j++;
 36 while((a[i+1] >= 'a' && a[i+1] <= 'z') || (a[i+1] >= '0' && a[i+1] <= '9'))
 37 {
 38 i++;
 39 tmp[j] = a[i];
 40 j++;
 41 }
 42 tmp[j] = '\0';
 43 j = panduan(tmp);
 44 }
 45 
 46 if(a[i] >= '0' && a[i] <= '9')    // 判斷數字
 47 {
 48 tmp[j] = a[i];    
 49 j++;
 50 while(a[i+1] >= '0' && a[i+1] <= '9')
 51 {
 52 i++;
 53 tmp[j] = a[i];
 54 j++;
 55 }
 56 tmp[j] = '\0';
 57 printf("<%s, 11>\n", tmp);
 58 j = 0;
 59 }
 60 
 61 switch(a[i])    // 判斷符號
 62 {
 63 case '+':printf("<+, 13>\n");break;
 64 case '-':printf("<-, 14>\n");break;
 65 case '*':printf("<*, 15>\n");break;
 66 case '/':printf("</, 16>\n");break;
 67 case ':':
 68 {
 69 if(a[i+1] == '=')
 70 printf("<:=, 18>\n");
 71 else
 72 printf("<:, 17>\n");
 73 }break;
 74 case '<':
 75 {
 76 if(a[i+1] == '=')
 77 printf("<<=, 21>\n");
 78 else if(a[i+1] == '>')
 79 printf("<<>, 22>\n");
 80 else
 81 printf("<<, 20>\n");
 82 }break;
 83 case '>':
 84 {
 85 if(a[i+1] == '=')
 86 printf("<>=, 24>\n");
 87 else
 88 printf("<>, 23>\n");
 89 }break;
 90 case '=':printf("<=, 25>\n");break;
 91 case ';':printf("<;, 26>\n");break;
 92 case '(':printf("<(, 27>\n");break;
 93 case ')':printf("<), 28>\n");break;
 94 case '#':printf("<#, 0>\n");break;
 95 }
 96 
 97 i++;
 98 }
 99 }
100 
101 int main(void)
102 {
103 char a[300];
104 
105 printf("input : ");
106 gets(a);
107 cifafenxi(a);
108 
109 return 0;
110 }
  1. 4.      運行結果及分析

一般必須配運行結果截圖,結果是否符合預期及其分析。

  

四、實驗總結

這次實驗很有難度,一開始剛看到題目,毫無頭緒,完全不知道是要干什么的,之后不斷的上網查,問同學,開始理解題目,開始知道目的,在隊友的幫助下,也開始知道怎么編寫。在本次實驗中我認識到程序不經常編譯,水平只會降低。好多關於之前的知識也會逐漸忘掉。所以以后我會經常寫程序,理解程序的內涵。經過多次檢測,多次修改,多嘗試各種方法,最終編寫出來,雖然題目是做出來了,但是仍然存在很多漏洞,以后我會繼續努力,學會從多角度思考!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM