计算器程序
对于计算的优先级问题,如何从输入读取包括数字和操作符在内的表达式的方法,并以一种合理的方式进行存储?
分词(tokenize):读取输入字符并组合成单词(token)
单词可以看做一个单元的一个字符序列,例如数字或者运算符。
利用(kind,value)的形式来表示单词,其中kind表示单词是一个数字、运算符还是括号。value所保存的为值(比如如果是数字那么就是数值)
如何实现这种单词?
用户自定义类型(user-defined type)
class Token
{
public://公有成员,表示可以被访问的
char kind;
double value;
};
利用如下方法进行定义:
Token t;
t.kind = 't';
Token t1;
t1.kind = '8';//利用字符8来表示数值的类型
t1.value= 3.14;
Token t2 = t1;//可以直接进行拷贝初始化,这时值也会赋给t2
Token t3 = {'8',15};//直接构造Token对象
实现一个文法的程序通常被称为分析器
公有接口与私有实现
公有接口(public)一般只包含用户所需要的内容,经常是一组函数
私有接口(private)则包含实现公有函数所必须的内容,包括用于处理复杂细节的数据与函数,而这些都是用户不必知道也不应该使用的。