欢迎来到天天文库
浏览记录
ID:53874770
大小:24.50 KB
页数:5页
时间:2020-04-10
《括号匹配C++程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#include#include#includeusingnamespacestd;///////////////////////////////////////////////CBalance类//此类对于一般的C++或者C文件进行括号匹配检查//文件可以有注释,字符串……//字符串常量不可以跨行//my.h定义了常用的类库////////////////////////////////////////////classCBalance{private:ifstreamfin;//文件流intn
2、CurrentLine;//正在处理的行号intnErrors;//已发现的错误数structCSymbol//此类记录遇到的字符和字符的行号{charcToken;intnTheLine;};enumCommentType{SlashSlash,SlashStar};//记录//和/*两中注释方式//CheckBalance()函数的工具类//CheckMatch函数用于比较两个符号是否匹配boolCheckMatch(charchar1,charchar2,intnLine1,intnLine2);//GetNextSymbol函数用于返回读到的括号charGetNextSy
3、mbol(void);//PutBackChar用于把字符重新返还给文件流voidPutBackChar(charchar1);//SkipComment根据注释符的不同跳过源文件的注释voidSkipComment(enumCommentTypetype);//SkipQuote函数用于跳过源文件中的字符串和字符常量voidSkipQuote(chartype);//NextChar函数用于得到下一个字符charNextChar(void);public:CBalance(constchar*filename);//构造函数intCheckBalance();//检查fin中的
4、字符是否匹配};classnoFile{};//定义的异常类,当函数不存在的时候抛出异常CBalance::CBalance(constchar*filename){fin.open(filename);if(!fin)thrownoFile();nCurrentLine=1;nErrors=0;}intCBalance::CheckBalance(){structCSymbolnode;//符号与行号stackst;//定义的符号栈charLastChar,Match;//LastChar为读入的符号,Match为栈顶的字符while(LastChar=Get
5、NextSymbol())//从文件中读取括号字符,直到文件结束{//while_beiginswitch(LastChar){//switch_beigincase'(':case'[':case'{'://遇到这三种符号要进栈node.cToken=LastChar;node.nTheLine=nCurrentLine;st.push(node);break;case')':case']':case'}'://遇到这三种括号要进行比较if(st.isEmpty()){nErrors++;cout<<"在第"<6、endl;}else{node=st.pop();Match=node.cToken;if(!CheckMatch(Match,LastChar,node.nTheLine,nCurrentLine))nErrors++;}break;}//switch_end}//while_endwhile(!st.isEmpty())//栈中多余的符号{nErrors++;node=st.pop();cout<<"第"<7、tch(charchar1,charchar2,intnLine1,intnLine2){if(char1=='('&&char2!=')'8、9、char1=='['&&char2!=']'10、11、char1=='{'&&char2!='}'){cout<<"发现第"<
6、endl;}else{node=st.pop();Match=node.cToken;if(!CheckMatch(Match,LastChar,node.nTheLine,nCurrentLine))nErrors++;}break;}//switch_end}//while_endwhile(!st.isEmpty())//栈中多余的符号{nErrors++;node=st.pop();cout<<"第"<7、tch(charchar1,charchar2,intnLine1,intnLine2){if(char1=='('&&char2!=')'8、9、char1=='['&&char2!=']'10、11、char1=='{'&&char2!='}'){cout<<"发现第"<
7、tch(charchar1,charchar2,intnLine1,intnLine2){if(char1=='('&&char2!=')'
8、
9、char1=='['&&char2!=']'
10、
11、char1=='{'&&char2!='}'){cout<<"发现第"<
此文档下载收益归作者所有