首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

TC++PL计算器例子的几个小问题`有书的帮忙看下

2012-03-20 
TC++PL计算器例子的几个问题````有书的帮忙看下P97:只要在所有输入字符中,没有任何字符的值被当做枚举符使

TC++PL计算器例子的几个问题````有书的帮忙看下
P97:只要在所有输入字符中,没有任何字符的值被当做枚举符使用,这种方式就可以工作(这句话完全不懂了`)
---在我所知道的字符集中,都不存在可打印的值只有一位数字的情况(digit,alpha只有一位不算吗?可以打印呀)
P102:使用至今所定义的这个计算器,可以发现一些不方便的地方:需要记住在每一个表达式的最后加一个分号,以使它的值能够被打印出来(不知道这个要求是在程序的哪里没找到``不过接下去的说要空白字符结束倒能理解)....
----------
下面这个问题不是计算器的
1,避免非平凡的指针算术
2.避免在代码中使用非平凡的文字量("神秘的数"1,相反,应该定义和使用各种符号常量)
上面两句"非平凡"是什么个概念?

[解决办法]
之前手头没有中文版的TC++PL。现在下载了一份,试者回答一下。

1、只要在所有输入字符中,没有任何字符的值被当做枚举符使用,这种方式就可以工作
这和get_token的实现有关系。注意前一句“将单词(token)用它们的字符所对应的整数表示”。所谓“这种方式”就是指这个。相应的,在后文get_token的实现中,如果独到一个字符,就直接用它的值表示它所对应的token:
return curr_tok=Token_value(ch);
而如果在输入字符中,有任何字符的值被当做枚举符使用。如一个ch = '+ '并不表示加法操作符,而是某个枚举符(对应某个数值);那么ch就不能直接按其值被当作PLUS的token,而应做其他解释(如在计算器的例子中,枚举符应被作为一个NUMBER看待)。

2、在我所知道的字符集中,都不存在可打印的值只有一位数字的情况
这是指可打印字符(printing character)在字符集中的数值。如使用ASCII字符集时,是指一个 '+ '或一个 '1 '的ASCII值,而不是指它的字面值。因为Token_value中,0、1、2被用来表示NAME、 NUMBER、END。所以这个条件是说PLUS等等都是> =10的值,因此不会冲突。原文是:and no current character set I know of has a printing character with a single-digit integer value.

3、避免非平凡的指针算术
“非平凡的”应该是指非语言默认的行为。
平凡的指针算术是指两个指针指向同一个数组(包括数组后的第一个字符)的情况。如果不是这种情况的指针算术,属于 undefined 的行为,应该避免。

4、避免在代码中使用非平凡的文字量("神秘的数"1,相反,应该定义和使用各种符号常量)
这里是指这个文字量除了它的值以外,还有其特定的意义。例如:
unsigned int aaa;
...
if (aaa > 255)
...

这里 255 用来判断aaa的当前值是否可以用一个字节来存储。但是 255 是神秘的,会给阅读和维护带来困扰。所以,应该把它定义成符号常量,如
unsigned int aaa;
const unsigned int MAX_SINGLE_BYTE_VALUE = 255;
...
if (aaa > MAX_SINGLE_BYTE_VALUE)
...

热点排行