设为首页 加入收藏

TOP

一个计算器的C语言实现
2014-11-23 19:18:45 来源: 作者: 【 】 浏览:17
Tags:一个 计算器 语言 实现

今天在读《编译原理及实践》时,看到了一个简单的整数计算器的实现。

按照书上的思路,我稍微进行了扩展:

1、从整数计算器扩展到小数计算器。

2、支持除法

3、支持空字符。

运行效果如下:

\

代码很简单,如下:< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+Y2FsLmM6PC9wPgo8cD48cHJlIGNsYXNzPQ=="brush:java;">#include #include char token; double exp(void); double term(void); double factor(void); char getPrintableChar(void); void match(char expectedToken); void error(void); int main(void) { double result; for (;;) { token = getPrintableChar(); if (token == 'q') break; result = exp(); if (token == '\n') printf("Result is: %g\n", result); else error(); } return 0; } double exp(void) { double temp = term(); while (token == '+' || token == '-') switch(token) { case '+': match('+'); temp += term(); break; case '-': match('-'); temp -= term(); break; } return temp; } double term(void) { double temp = factor(); while (token == '*' || token == '/') switch(token) { case '*': match('*'); temp *= factor(); break; case '/': match('/'); temp /= factor(); break; } return temp; } double factor(void) { double temp; if (token == '(') { match('('); temp = exp(); match(')'); } else if (isdigit(token)) { ungetc(token, stdin); scanf("%lf", &temp); token = getPrintableChar(); } else error(); return temp; } void error(void) { fprintf(stderr, "Error!\n"); exit(EXIT_FAILURE); } void match(char expectedToken) { if (expectedToken == token) token = getPrintableChar(); else error(); } char getPrintableChar(void) { char temp; do temp = getchar(); while (isblank(temp)); return temp; }

程序实现的思路是按照EBNF规则实现,即:

  
    -> 
   
     { 
     
     
       } 
      
        -> + | - 
       
         -> 
        
          { 
          
          
            } 
           
             -> * | / 
            
              -> ( 
             
               ) | Number
             
            
           
          
         
        
       
      
     
    
   
  

关于EBNF, 可以参考书上的内容,在这里就不赘述了。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言实现 操作系统 银行家算法 下一篇C - Hyperhuffman(哈弗曼值)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: