习题
1.修改计算器程序,允许名字中出现下划线。
2.提供赋值操作符=,以便在let定义变量后能够修改其值。试讨论赋值操作符的用处以及可能引起的问题。
3.提供命名常量——不允许更改其值。提示:在Variable中增加一个用于区分常量和变量的成员,并根据该成员判断set_value()是否允许执行。如果允许用户定义常量(而不是计算器程序中预定义的pi和e那样的常量),必须增加一个符号,用户可用其表达常量定义,例如用const表示常量定义:const pi=3.14。
4.get_value()、set_value()、is_declared()和declare_name()等函数都操作全局变量var_table。定义一个Symbol_table类,其中一个成员是vector<Variable>类型的var_table,成员函数为get()、set()、is_declared()和declare(),并使用该类重新编写计算器程序。
5.修改Token_stream::get()函数,在读到换行时返回单词print。这就需要寻找空格并对换行('\n')进行特殊处理。可以使用标准库函数issapce(ch),当ch为空格时返回true。
6.每个程序都应该具有给用户提供帮助信息的功能,修改计算器程序,当用户输入H(大小写均可)时能够显示帮助信息。
7.将命令符q和h分别改为quit和help。
8.7.6.4节给出的文法是不完整的(我们提醒过你不要过分依赖注释),没有定义语句序列,例如4+4;5-6;,也不包括7.8节对文法所做的改进。修改文法,并为注释添加你认为必要的内容。
9.为计算器程序提出三种本章没有提及的改进,并实现其中的一种。
10.修改计算器程序,使其仅仅能处理整数,并在发生上溢和下溢时给出错误信息。提示:利用narrow_cast(见7.5节)。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access