C++程序设计语言(特别版) -- 一个桌面计算器

本文通过构建一个支持浮点数中缀运算的桌面计算器,介绍C++程序设计中的分析器原理。分析器使用递归下降方式,终结符由get_token()识别,非终结符如expr(), term()和prim()处理。代码实现中,表达式的运算对象在确定后立即求值。此外,文中还提及了程序结构和扩展可能性。" 117836730,10546378,使用canvas实现知乎登录页背景动画效果,"['HTML', 'CSS', 'canvas', '背景特效', '动画效果']
摘要由CSDN通过智能技术生成

前言

  • 这里要介绍各种语句和表达式,将通过一个桌面计算器的程序做些事情,该计算器提供四种座位浮点数的中缀运算符的标准算术运算。
  • 这个计算器由四个部分组成:一个分析器,一个输入函数,一个符号表和一个驱动程序。

分析器

program:
    END
    expr_list END //END表示输入结束
expr_list:
    expression PRINT // PRINT表示分号
    expression PRINT expr_list
expression:
    expression + term
    expression - term
    term
term:
    term / primary
    term * primary
    primary
primary:
    NUMBER
    NAME
    NAME = expression
    - primary
    (expression)
  • 语法分析器采用通常的递归下降的风格。终结符由词法分析程序get_token()识别,而非终结符由语法分析函数expr(),term()和prim()识别。一旦一个表达式的两个运算对象都知道,就立即对这个表达式求值。
  • 个人觉得分析器就像是定义程序能接受什么输入,而这里采用递归的形式,例如program代表程序,program可以接受END符号或者expr_list END,而expr_list又继续递归下去可以由其他的组成,直到可以得到一个结束情况。

总代码

#include<iostream>
#include<string>
#include<map>
#include<cctype>
using namespace std;

// 将token用他们的字符所对应的整数表示,这样做既方便有效,
// 又能帮助使用排错系统的人。
enum Token_value {
    NAME, NUMBER, END, PLUS=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值