《C简单编辑器实例(函数库简单应用).docx.pdf》由会员分享,可在线阅读,更多相关《C简单编辑器实例(函数库简单应用).docx.pdf(12页珍藏版)》请在三一文库上搜索。
1、/ OneComputer. cpp : 定义控制台应用程序的入口点。 / “stdafx.h“ II ? 1 II iostream VI VI map cctype “sstream“ “丄 ? VI string us i ng namespace std i stream *i nput; / doubIe number_value; str i ng str i ng_vaIue; / / 初等项函 数的变量 / maptabIe; /检查符号表 用在pCm上面的 #i ncIude #i ncIude #i ncIude #i ncIude #i ncIude #i ncIude
2、/ int no of errors: / / doubIe expr (boo I get); doubIe term (boo I get): doubIe pr im(bool get); doubIe error (const str i ng / 枚举类型用来表示各种符号 enum Token vaIue NAME, NUMBER, END, PLUS二 + MINUS二 MUL*,DIV?/, PRINT二; , ,ASSIGN= , = , ,LP= , ( , ,RP= , ) 1 ; Token_value cur r_tok=PR I NT; / 定义字符值,用 u ; 防
3、止错误导致的致 命错误 / 定义输入函数 Token_va I ue get_token () char ch; do if (!cin.get (ch)return curr_tok二END; wh i Ie (ch! = n cinch; switch (ch) case ;: case * : case /: case +: case : case (: case 1 ): case 二 : return cur r_ _to k 二 Token_ _va 1 ue (ch) case O : case 111: case 2 :case 3 : case 4 : case 5: cas
4、e :case T : case 8 : case 9 :case 1 1 . ? return cur r tok二NUMBER; defauIt: i f (i saIpha (ch) str ing_vaIue二ch; wh i I e (c i n. get (ch) c i n. put back (ch); error (“bad token“); return curr_tok=PRI NT; int ain(int argc, char* argv) switch (argc) i nput二 break; case 2: i nput二new i str i ngstream
5、(argv1); break; defauIt: error (“too many arguments“); return 1; table ”pi ”=3. 141592653547; table nen=2. 71818281828478; while (*i nput) get_token (); if (curr_tokEND) break; i f (curr_tokPR I NT) cont i nue; couexpr (fa I se) ? n; i f (i nput!二 / 处理加减的函数 doubIe expr (boo I get) doubIe I eft二term
6、(get); for (;) switch(curr_tok) case PLUS: Ieft+二term (true); break; case MINUS: I eft-二term (true); break; defauIt: return left; / 用来处理乘除的函数 doubIe term (boo I get) doubIe left二pr im(get); for(;) switch(curr_tok) case MUL: I eft*=pr im (true); break; case DIV: if (doub Ie d=pr im(true) left Apr im(
7、 true); break; e I se return error (“di vide by 0“): defauIt: return I eft; / 处理初等项函数 doubIe pr im(bool get) i f (get) get_token (); switch(curr_tok) case NUMBER: / 浮点常量 doubIe v=number_value; get_ to ken (); return v; case NAME: double if (get_token () ASS I GN) v=expr (true); return v: case MINUS: return -pr im (true); case LP: doubIe e二expr (true); if(curr_tok!二RP) return error (“) expected!“): get_ to ken (); return e; defauIt: return error (“pr imary expected“): doubIe error (const str i ng cerr? , error: , ?s?,n , ; return 1;
链接地址:https://www.31doc.com/p-5615848.html