LR 1 分析法的總控的實現(C 實現)

2021-08-31 23:42:05 字數 1750 閱讀 1917

(1)若action[sm , ai] = s則將s移進狀態棧,並把輸入符號加入符號棧,則三元式變成

為:(s0s1…sm s , #x1x2…xm ai , ai+1…an#)

(2) 若action[sm , ai] = rj則將第j個產生式a->β進行歸約。此時三元式變為

(s0s1…sm-r s , #x1x2…xm-ra , aiai+1…an#)

(3) 若action[sm , ai]為「接收」,則三元式不再變化,變化過程終止,宣布分析成功。

(4) 若action[sm , ai]為「報錯」,則三元式的變化過程終止,報告錯誤。

};//定義lr文法的分析表

class lranalysetable;

//定義終結符的個數

int ternum =6;

char nonterminalchar[100]=;

//定義非終結符的個數

int nonternum = 3;

//定義狀態數

int statusnum = 12;

string action[12][6]=,,,,,,

,,,,,};

int goto[12][3] = ,,,,,,,,,,,};

//獲取終結符的索引

int getterminalindex(char var)

//讀取輸入的字串

void readstr()

//把#加入容器

inputstr.push_back('#');

}//對棧容器進行輸出,i=0,返回status中的字串,i=1,返回sign中的字串,i=2返回inputstr中的字串

string vecttrancstr(int i)

return str;

}//輸出符號棧

else if(i == 1)

}//輸出待分析的字串

else

}buf[count] = '\0';

string str(buf);

return str;

}//總控,對輸入的字串進行分析

void lranalyse()

}int r = s;

//修改s

s = analysetable.goto[oldstatus][analysetable.getnonterminalindex(nonterch)];

cout<對於正確的輸入串i+i*i執行結果如下:

對於不正確的輸入串i+i)執行結果如下:

基於C 實現的語法分析之LL 1 分析法實現

一 設計目的 根據某一文法編制除錯ll 1 分析程式,以便對任意輸入的符號串進行分析。本次實驗的目的主要是加深對 分析ll 1 分析法的理解。二 設計要求 程式輸入 輸出示例 對下列文法,用ll 1 分析法對任意輸入的符號串進行分析 原文法e e t e t t t t f t f f f id e...

語法分析 LL(1)分析的python實現

語法分析 將切分的單詞序列組合成各類短語短語,常見的方法 自上而下,自下而上。ll 1 左掃瞄,左推導。大體步驟 1.從檔案或其他方式匯入 儲存文法 實質就是幾行符號流 並把其中的終結字元和非終結字元存在陣列 列表裡 2.把文法每行的 或 切分成兩個即a b c 切分為a b和a c for i i...

二分查詢法的實現(基於C)

在乙個長度為t的順序陣列中,尋找目標為target的值,找到則返回該值在資料中的位置,否則返回 1.二分查詢法通過對陣列的範圍跟蹤來解決問題。開始時,範圍是整個陣列,通過將範圍中間的元素與目標target值比較並丟棄一半範圍,範圍被縮小一半,這個過程將一直持續,直到target值被發現,或那個能夠包...