欢迎来到天天文库
浏览记录
ID:37910879
大小:40.00 KB
页数:11页
时间:2019-06-02
《C++简单编辑器实例(函数库简单应用)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、//OneComputer.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include"iostream"#include"map"#include"cctype"#include"sstream"#include"string"usingnamespacestd;istream*input;////////////////////////////////////////////doublenumber_value;stringstring_value;///////////////////////////////////////////////初
2、等项函数的变量/////////////////////////////////////////////////maptable;/////////////////////////////////////////////////检查符号表用在prim上面的//////////////////////////////////////////////////intno_of_errors;/////////////////////////////////////////////////////////////////////////////////////
3、//////////doubleexpr(boolget);doubleterm(boolget);doubleprim(boolget);doubleerror(conststring&s);//////////////////////////////////////////////////枚举类型用来表示各种符号enumToken_value{NAME,NUMBER,END,PLUS='+',MINUS='-',MUL='*',DIV='/',PRINT=';',ASSIGN='=',LP='(',RP=')'};Token_valuecurr_tok=PRINT;//定义字符
4、值,用“;”防止错误导致的致命错误//定义输入函数Token_valueget_token(){charch;do{if(!cin.get(ch))returncurr_tok=END;}while(ch!=''&&isspace(ch));cin>>ch;switch(ch){case0:returncurr_tok=END;case';':case'*':case'/':case'+':case'-':case'(':case')':case'=':returncurr_tok=Token_value(ch);case'0':case'1':case'2':case'3':
5、case'4':case'5':case'6':case'7':case'8':case'9':case'.':returncurr_tok=NUMBER;default:if(isalpha(ch)){string_value=ch;while(cin.get(ch)&&isalnum(ch))string_value.push_back(ch);cin.putback(ch);returncurr_tok=NAME;}error("badtoken");returncurr_tok=PRINT;}}int_tmain(intargc,char*argv[]){switch(ar
6、gc){case1:input=&cin;break;case2:input=newistringstream(argv[1]);break;default:error("toomanyarguments");return1;}table["pi"]=3.141592653547;table["e"]=2.71818281828478;while(*input){get_token();if(curr_tok==END)break;if(curr_tok==PRINT)continue;cout<7、put;returnno_of_errors;}//处理加减的函数doubleexpr(boolget){doubleleft=term(get);for(;;)switch(curr_tok){casePLUS:left+=term(true);break;caseMINUS:left-=term(true);break;default:returnleft;}}//用来处理乘除的函数doubleterm(boolget){doubleleft=prim(get);
7、put;returnno_of_errors;}//处理加减的函数doubleexpr(boolget){doubleleft=term(get);for(;;)switch(curr_tok){casePLUS:left+=term(true);break;caseMINUS:left-=term(true);break;default:returnleft;}}//用来处理乘除的函数doubleterm(boolget){doubleleft=prim(get);
此文档下载收益归作者所有