program:
endexpr_list end //end表示輸入結束
expr_list:
expression print // print表示分號
expression print expr_list
expression:
expression + term
expression - term
term
term:
term / primary
term * primary
primary
primary:
number
name
name = expression
- primary
(expression)
#include#include#include#includeusing namespace std;
// 將token用他們的字元所對應的整數表示,這樣做既方便有效,
// 又能幫助使用排錯系統的人。
enum token_value ;
token_value curr_tok = print;
double expr(bool);
double term(bool);
double prim(bool);
token_value get_token();
double error(const string&);
map table;
int no_of_errors;
int main()
return no_of_errors;
}// 每個分析器都有乙個bool引數,
// 指明該函式是否需要呼叫get_token()去取得下乙個引數
// expr處理加減,一直到不是加減返回left
double expr(bool get)
}}// 函式term處理乘除,採用的方式與expr()處理方法一樣
double term(bool get)
return error("divide by 0");
default:
return left;}}
}double number_value;
string string_value;
// prim處理初等項的方式很像expr和term
double prim(bool get)
case name:
case minus:
return -prim(true);
case lp:
default:
return error("primary expected");
}}token_value get_token() while(ch != '\n' && isspace(ch));
switch(ch)
error("bad token");
return curr_tok = print;
}}double error(const string& s)
C 程式語言(特別版)感悟
c 語言學習 第一部分 導論 從c語言學習的人來學習c 語言,在寫c 程式時,就很難丟掉c語言的風格,這樣就會因此丟到c 語言的一些潛在的優勢。在這裡列舉出c 和c語言的幾點 風格差別之處。1 在c 風格程式中,很少使用巨集定義。用const或者enum定義明顯的常量,用inline避免函式呼叫的額...
《C 程式語言》(特別版)第四章答案
1.2 讓 hello,world 程式執行。如果程式無法按所寫的形式執行,請看b.3.1節 include using namespace std int main 2.1 對於4.9節的每個宣告做下面的事情 如果該宣告不是乙個定義,請為它寫乙個定義。如果該宣告時乙個定義,請改寫,使它成為不是定義...
乙個計算器的C語言實現
今天在讀 編譯原理及實踐 時。看到了乙個簡單的整數計算器的實現。依照書上的思路,我略微進行了擴充套件 1 從整數計算器擴充套件到小數計算器。2 支援除法 3 支援空字元。執行效果例如以下 非常easy,例如以下 cal.c include include char token double exp ...