編譯原理 計算器 C 實現 引用

2021-04-16 14:15:51 字數 1368 閱讀 1456

#include 

#include 

#include 

#include 

using namespace std;

enum types ;

//定義列舉型別把delimiter初試化為1後面的相應的是前面值+1

class parser 

; // 類構照函式的具體實現

parser::parser()

// 方法eval_exp的具體實現過程

double parser::eval_exp(char *exp)

eval_exp2(result);

if(*token) serror(0); // last token must be null

return result;

} // 兩個變數字元是加或者減操作

void parser::eval_exp2(double &result) }

} // 兩個變數是乘或者除操作 或者是取餘

void parser::eval_exp3(double &result) }

} // 進行^運算

void parser::eval_exp4(double &result)

for(t=(int)temp-1; t>0; --t) result = result * (double)ex;

} }

void parser::eval_exp5(double &result)

eval_exp6(result);

if(op=='-') result = -result;

} // 進行有括號的演算法

void parser::eval_exp6(double &result)

else atom(result);

} // 取得數值

void parser::atom(double &result) }

// 輸出出錯資訊.

void parser::serror(int error)

; cout  < < e[error]  < < endl;

} // 取得下乙個token值

void parser::get_token()

else if(isalpha(*exp_ptr)) 

else if(isdigit(*exp_ptr)) 

*temp = '/0';

} // isdelim函式的具體實現,如果引數是乙個分割符則返回真

int parser::isdelim(char c)

int main()

; return 0;

}  

編譯原理 Lex和Bison實現計算器

實現以下步驟,掌握 flex 和 bison 的工作過程 a 在 dos 命令提示符下依次執行以下兩行命令 flex calc.lex bison ocalc.c calc.y b 編譯執行 calc.c 編譯執行完後 題目要求 用 flex 和 bison 實現乙個功能更為強大的計算器,包含以下運...

計算器c 實現

1.中綴表示式轉字尾表示式 中綴 a b c d e 字尾 abc de 轉換步驟 1 從左到右掃瞄中綴表示式,遇到 轉 6 2 遇到運算元直接輸出 不進棧 3 遇到 則連續出棧輸出,直到遇到 為止 出棧但不輸出 否則 4 若是其它操作符,則與棧頂的操作符比較優先順序 若優先順序小於棧頂的優先順序,...

C 實現簡單計算器

要求 輸入乙個包含 的非負整數計算表示式,計算表示式的值,每個字元之間需有乙個空格,若一行輸入為0,則退出程式。輸入樣例 4 2 5 7 11 輸出樣例 13.36 實現 include include using namespace std char str 200 儲存表示式字串 int mat...