先給parser
這個類乙個code
字段,用來儲存字尾表示式:
class parser
void term(lexerstream* lexers)
void factor(lexerstream* lexers)
vector
code;
};
然後在每個解析函式中合適的地方壓入值。具體**前往 learncompilers/hll/calculator001 檢視。
class calculator else
} while(!code.empty());
return calc.top();
}bool isoperator(const
string& s) ;
string calcula(const
string& operation, const
string& arg0, const
string& arg1);
string add(const
string& arg0, const
string& arg1)
string sub(const
string& arg0, const
string& arg1);
string mul(const
string& arg0, const
string& arg1);
string div(const
string& arg0, const
string& arg1);
vector
code;
stack
calc;
}
具體看result
函式。先取出字尾表示式中的token
,如果是操作符,就從運算結果棧中取出兩個token
,然後進行計算,將獲取到的結果壓入運算結果棧中;如果不是操作符,就壓入運算結果棧中。
具體**前往 learncompilers/hll/calculator001 檢視。
字首、中綴、字尾表示式
計算字首表示式與字尾表示式
字首表示式 從後往前掃,遇到運算元入棧 遇到字元時取兩棧頂元素進行相應運算後結果入棧。字尾表示式 與上類似,只是是從前往後掃。求字首表示式的值 25 分 算術表示式有字首表示法 中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2 3 7 4 8 4的字首表示式是 2 3 ...
Python生成字尾表示式及計算
字尾表示式 也叫做逆波蘭式或逆波蘭記法 其實就是將運算子寫在運算元之後的式子。比如我們平時寫a b,這是中綴表示式,寫成字尾表示式就是ab 下面來看乙個更複雜的例子 求 a b c a b e字尾表示式的j具體過程 a b c a b e a b c a b e a b c a b e ab c a...
字尾表示式計算
演算法 1.遍歷字尾表示式中的數字和符號 對於數字 進棧 對於符號 從棧中彈出右運算元 從棧中彈出左運算元 根據符號進行運算 將運算結果壓入棧中 2.遍歷結束 棧中的唯一數字為計算結果 include include linkstack.h int isnumber char c int isope...