中綴表示式求值與LL 1 方法

2021-08-27 13:10:04 字數 655 閱讀 1662

email:[email protected]

blog:

顯然如下的方法生成的語言是算術表示式

e->tg

g->+tg | -tg|e

t->fs

s->*fs | /fs | e

f->(e) | number

注:e表示空

所以我們可以根據這個式子寫出相應的演算法來對乙個表示式求值。其演算法如下:

輸入:輸入的是1位正整數的算術運算,如(3+4)*((4-5)/2),注意,這裡為了簡單,所有的資料都是一位的正整數,並且不能有階乘和冪運算。

#include using namespace std;

char expr[10000];

int start;

double e();

double t();

double g();

double s();

double f();

int main(){

cin>>expr;

cout<

上面的程式正確的原因是因為他是ll(1)型方法,根據ll(1)型方法的判定,我們只需要向右檢視乙個字元就可以給出它的推導,故而上面的演算法是正確的。

中綴表示式求值的方法 棧

對於像是1 2的中綴表示式,我們可以輕鬆地運用 來算出結果。但是對於1 2 2 3 4這樣的表示式,事情就變得有些複雜了.對於上述的表示式,我們可以運用棧的相關知識來解決 建立兩個棧,棧1放數字,棧2放運算子 遇到數字時入棧1 遇到運算子時,若棧2為空,則pop出棧1中的兩個數運算,將運算完的結果壓...

編譯原理 語法分析之LL 1 方法

這是另乙個關於follow集和first集的求解文章,兩個結合著看效果更佳 前段時間為了做編譯器,猛啃了一下編譯原理。語法分析部分用的是比較簡單上手的ll 1 自認為ll 1 的理論部分理解得不錯,在這裡寫出來跟大家share一下。關於什麼是ll 1 就不贅述了,書上也說得很清楚,就是從左向右掃瞄輸...

中綴表示式與字尾表示式之間的互轉及求值

中綴表示式轉字尾表示式 遇到 依次彈出棧頂元素並輸出,直至遇到 後,左括號出棧 掃瞄結束後若棧中不為空依次彈出 例 2 9 6 3 5 4 從左到右開始掃瞄 掃瞄到2,輸出 此時輸出串為 2 運算子棧為 null 掃瞄到 入棧 此時輸出串為 2 運算子棧為 掃瞄到 入棧 此時輸出串為 2 運算子棧為...