資源簡介
C語言小子集編譯程序,實現,詞法分析,語法分析,語義分析,目標代碼生成

代碼片段和文件信息
#include
#include
#include
#include
#include
#include
using?namespace?std;
struct?token//詞法?token結構體
{
int?code;//編碼
int?num;//遞增編號
token?*next;
};
token?*token_head*token_tail;//token隊列
struct?str//詞法?string結構體
{
int?num;//編號
string??word;//字符串內容
str?*next;
};
str?*string_head*string_tail;//string隊列
struct?ivan//語法?產生式結構體
{
char?left;//產生式的左部
string?right;//產生式的右部
int?len;//產生式右部的長度
};
ivan?css[20];//語法?20個產生式
struct?pank//語法?action表結構體
{
char?sr;//移進或歸約
int?state;//轉到的狀態編號
};
pank?action[46][18];//action表
int?go_to[46][11];//語法?go_to表
struct?ike//語法?分析棧結構體,雙鏈
{
ike?*pre;
int?num;//狀態
int?word;//符號編碼
ike?*next;
};
ike?*stack_head*stack_tail;//分析棧首尾指針
struct?L//語義四元式的數據結構
{
int?k;
string?op;//操作符
string?op1;//操作數
string?op2;//操作數
string?result;//結果
L?*next;//語義四元式向后指針
L?*Ltrue;//回填true鏈向前指針
L?*Lfalse;//回填false鏈向前指針
};
L?*L_four_head*L_four_tail*L_true_head*L_false_head;/*四元式鏈,true鏈,false鏈*/
struct?symb//語義輸入時符號表
{
string?word;//變量名稱
int?addr;//變量地址
symb?*next;
};
symb?*symb_head*symb_tail;//語義符號鏈表
////////////////////////////////詞法分析有關函數聲明
void?outdaima()?;
void?scan();//按字符讀取源文件
void?cifa_main();//詞法分析主程序
int?judge(char?ch);//判斷輸入字符的類型
void?out1(char?ch);//寫入token.txt
void?out3(char?chstring?word);//寫入string.txt
void?input1(token?*temp);//插入結點到隊列token
void?input3(str?*temp);//插入結點到隊列string
void?output();//輸出三個隊列的內容
void?outfile();//輸出三個隊列的內容到相應文件中
////////////////////////////////語法分析有關函數聲明
void?yufa_main();//語法分析主程序
void?yufa_initialize();//初始化語法分析數據結構
int?yufa_SLR1(int?a);//語法分析主體部分
int?ID1(int?a);//給輸入字符編號,轉化成action表列編號
string?ID10(int?i);//給輸入字符反編號
int?ID2(char?ch);//給非終結狀態編號,轉化成go_to表列編號
int?ID20(char?ch);//給非終結狀態編號
char?ID21(int?j);//給非終結狀態反編號
void?add(ike?*temp);//給ike分析棧鏈表增加一個結點
void?del();//給ike分析棧鏈表刪除一個結點
/////////////////////////////////語義分析相關函數的聲明
void?yuyi_main(int?m);//語義分析主程序
void?add_L_four(L?*temp);//向四元式鏈中加一個結點
void?add_L_true(L?*temp);//向true鏈中加一個結點
void?add_L_false(L?*temp);//向false鏈中加一個結點
void?add_symb(symb?*temp);//向語義符號表鏈中加一個結點
void?output_yuyi();//輸出中間代碼四元式和最后符號表
string?newop(int?m);//把數字變成字符串
string?id_numtoname(int?num);//把編號轉換成相應的變量名
int?lookup(string?m);//變量聲明檢查
/////////////////////////////////全局變量的聲明
FILE?*fp;//文件指針
int?wordcount;//標志符計數
int?err;//標志詞法分析結果正確或錯誤
int?nl;//讀取行數
int?yuyi_linshi;//語義臨時變量
string?E_nameT_nameF_nameM_nameid_nameid1_nameid2_nameerrword;//用于歸約時名稱傳遞和未聲明變量的輸出
int?id_numid1_numid2_numid_leftid_whileid_thenid_do;//用于記錄一些特殊的字符位置信息
////////////////////////////////主程序開始
int?main()
{
cout<<“************************“< cout<<“*??說明:??????????????*“< cout<<“*??第一部分:詞法分析??*“< cout<<“*??第二部分:語法分析??*“< cout<<“*??第三部分:語義分析??*“< cout<<“*??第四部分:目標代碼生成??*“< cout<<“************************“< cifa_main();//詞法
yufa_main();//語法
output_yuyi();/
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????28086??2013-01-08?14:06??wxy.cpp
-----------?---------??----------?-----??----
????????????????28086????????????????????1
- 上一篇:矩陣的三角分解c程序
- 下一篇:奇異值分解SVDC語言源代碼
評論
共有 條評論