前言
- 这里要介绍各种语句和表达式,将通过一个桌面计算器的程序做些事情,该计算器提供四种座位浮点数的中缀运算符的标准算术运算。
- 这个计算器由四个部分组成:一个分析器,一个输入函数,一个符号表和一个驱动程序。
分析器
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;
enum Token_value {
NAME, NUMBER, END, PLUS=