第1章 词法陷阱
当我们读一个句子时,我们通常不会去想组成一个单词的单个字母的意思。实际上,字母自己所表达的意义很少:我们把他们组成单词,并且给这些单词赋予一定的意义。
对于C程序和其他语言的程序也是如此。单个字符并不表达任何意义,只在和上下文联系起来后,他们才有意义。因此,在:
p->s = "->";
里,两个-
代表两个不同的意义。更准确地说,两个-
各是不同的符号(token)的一部分,第一个是->
中的一部分,第二个则是字符串的一部分。此外,->
和组成它的两个字符都有完全不同的含义。
token代表程序中这样的一个部分:它在语句中作为一个单词总是扮演同样的角色,在感觉上,它每次出现时都是表达相同的含义。同样的字符序列可以在一个上下文中属于一个token,而在另一个上下文中又属于完全不同的另一个token。编译器中把一个程序分割成token的部分通常叫做词法分析器。
另一个例子,考虑下面的语句:
if (x > big) big = x;
这个语句中第一个token是if
,一个关键字。第二个token是左括号,然后是标识符x
、大于号、标识符big
……在C中,我们可以在token间添加多余的空格(还有Tab、换行符)等,所以我们还可以这样写:
if
(
x
>
big
)
big
=
x
;
本章将会探究对于token含义的常见的误解,以及token和组成它的字符间的关系。