博文

桌面计算器(2005-09-28 09:02:00)

摘要:程序是一个计算器,有4个部分组成:1.语法分析器(Parser),2.输入函数(input function),3.符号表(symbol table)4.驱动(driver).我是用的vc编译器,1,2,3用头文件,4用.cpp文件。第一部分Parser分析器,parser.h.作用是分析用户输入的语句的语法。用户可以在控制台输入以下内容:program:    END    expr_list ENDexpr_list:    expression PRINT    expression PRINT expr_listexpression:    expression+term    expression-term    termterm:    term*primary     term/primary    primaryprimary    NUMBER    NAME    NAME  = expression        注释:在vc中这中间好像必须有空格,不然不行,过一会再讨论这个    -primary    (expression)这里说明了语法,也可以说是给用户说明了使用规则,比如:你在控制台内输入 12*3 ;,计算器就会显示36,其中不管是什么符号(这里有12,*,3,;四个)都要从primary开始进行分析(具体实现后面说),分析器分析12是NUMBER然后再取*号,向上到term,12附给了term,进行*发运算,primary又要从输入继续取值,于......

阅读全文(4423) | 评论:0

metaprogam用法一例(2005-09-14 18:15:00)

摘要:meta progamming(元编程) 是C++中非常有趣的一个功能 计算 1!+2!+3!+4!+ ...+n!, 如果用metaprogam完成则非常的有趣,代码如下: template<size_t n> struct factorial {     enum{ val = n * factorial<n-1>::val }; }; template<> struct factorial<1> {     enum{ val = 1 }; };   #include <iostream> using namespace std; int main( void ) {     cout << factorial<1>::val           + factorial<2>::val           + factorial<3>::val           + factorial<4>::val           + factorial<5>::val << endl;           return 0; }   它和普通的写法有什么区别呢?区别在于普通的写法其结果是在运行时计算的,而metaprogam写法其结果却是在编译时计算的,不会占用任何运行时间. 上面的代码其实就等同于 int main( viod ) {     cout << 153 <......

阅读全文(3125) | 评论:0