鞏固對詞法分析的基本功能和原理的認識。
能夠應用自動機的知識進行詞法分析。
理解並處理詞法分析中的異常和錯誤。
掌握詞法分析的基本功能,並將其實現。
詞法分析程式應具有較好的可擴充套件性,應清晰明確。
除對相關問題的全面考慮外,還需對區域性作一些優化考慮(如符號表)
給出語言的詞法規則描述
針對這種單詞的狀態轉換圖和程式框圖
核心資料結構的設計(如符號表、關鍵字等)
錯誤處理(錯誤的位置及型別等)
#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主程式設計考慮 主程式的說明部分為各種 和變數安...