編譯原理課程實驗一 詞法分析

2021-10-25 09:05:11 字數 3173 閱讀 2479

鞏固對詞法分析的基本功能和原理的認識。

能夠應用自動機的知識進行詞法分析。

理解並處理詞法分析中的異常和錯誤。

掌握詞法分析的基本功能,並將其實現。

詞法分析程式應具有較好的可擴充套件性,應清晰明確。

除對相關問題的全面考慮外,還需對區域性作一些優化考慮(如符號表)

給出語言的詞法規則描述

針對這種單詞的狀態轉換圖和程式框圖

核心資料結構的設計(如符號表、關鍵字等)

錯誤處理(錯誤的位置及型別等)

#include #include #include #include #define size 10240 //預設大小

int token; // 當前標記

char *src; // 指向源**字串指標

int poolsize; // 預設文字/資料大小

int line; // 原始碼行號

char *keywords[26]=;

typedef struct nodenode;

//用於詞法分析,獲取下乙個標記,它將自動忽略空白字元。

struct node* next(struct node *p)

while(1)

else if(token == ' ')

}else if (token == '#')

key = 0;

value[0] = '#';

break;

}else if ((token >= 'a' && token <= 'z') || (token >= 'a' && token <= 'z') || (token == '_'))

value[i+1] = '\0';

key = 301;

//查詢已有的識別符號

for (j = 0; j < 26; j++)

}break;

}//整數 和 浮點數

else if (token >= '0' && token <= '9')

int temp = i;

if (*src == '.')

key = 402;

break;

}else

}else

key = 402;

break;

}else}}

//字串

else if (token == 34)

value[i] = (char)34;

src++;

key = 403;

break;

}//注釋

else if (token == '/')

key = 501;

break;

}else if (*src == '*')

key = 502;

break;

}else

}else if (token == '+')

else

}else if (token == '-')

else

}else if (token == '*')

else if (token == '=')

else

}else if (token == '!')

}else if (token == '

else if (*src == '

else

}else if (token == '>')

else if (*src == '>')

else

}else if (token == '|')

else

}else if (token == '&')

else

}else if (token == '^')

else if (token == '%')

else if (token == '[')

else if (token == ']')

else if (token == ';')

else if (token == '

else if (token == '}')';

break;

}else if (token == '(')

else if (token == ')')

else if (token == ',')

else if(token==0)

else

}p->key = key;

for(i = 0;i < 100;i++)

node *q = (node *)malloc(sizeof(node));

q->next = null;

p->next = q;

return p;

}//詞法分析的入口,分析整個 c 語言程式。

void program(struct node *p)

}//主函式

int main(void)

if (!(src = (char *)malloc(size)))

// 讀取原始檔

if ((i = fread(src,1,size,fd)) <= 0)

src[i] = 0; // 新增eof字元

本部落格做得十分匆忙,因此內容十分粗糙。並且本文的詞法分析程式實現的方式比較low(逐個字元進行判斷),沒有用到自動機等內容(暫時沒有這麼多時間來實現)。算是先挖個坑吧,以後有時間了再認真重新更新一篇(然後大概率就忘了)。

編譯原理系列 實驗一詞法分析

目錄根據pl 0語言的文法規範,編寫pl 0語言的詞法分析程式。要求 把詞法分析器設計成乙個獨立一遍的過程。詞法分析器的輸出形式採用二元式序列,即 單詞種類,單詞的值 樣例輸入 const a 10 var b,c begin read b c a b write c end.樣例輸出 consts...

編譯實驗 一 詞法分析

編譯原理課程即將結束,開始了在校中最麻煩的實驗,編譯實驗.同在乙個系,其他班的編譯實驗分成好幾塊,簡短的文法,源 連線 詞法分析流程圖 首先要做的第一步就是寫資料結構以及完成單詞表。詞法分析的任務就是將一段程式 分割單詞,把單詞資訊寫出來。例如在 while a 2 do a a 1 中進行詞法分析...

實驗一 詞法分析

1 實驗要求 1 從源程式檔案中讀取有效字元流並將其分析識別單詞符號,轉換成二元組內部表示形式輸出。2 視覺化方式展示詞法分析識別過程或者詞法分析器工作原理 選做 3 實驗時間4學時。4 實驗完成後,要提交實驗報告 包括源程式清單 2 實驗內容 2.1主程式設計考慮 主程式的說明部分為各種 和變數安...