对于c语言来说,程序中的单个字符孤立来看并没有什么意义。
符号(token)值得是程序的一个基本组成单元,其作用相当于一个句子中的单词。从某在意义上来说,一个单词无论出现在那个句子,它代表的意思都是一样的,是一个表义的基本单元。与此类似,符号就是程序中的一个基本信息单元。而组成的字符序列就不同,同一组字符序列在某个上下文环境中属于同一个符号,而在另一个上下文黄金中可能属于完全不用的另一个符号。
例如:p->s="->",如上面的字符‘-’和字符’>'组成的字符序列,在不同的上下文环境中,一个代表运算符,一个代表字符串
编译器复制将程序分解为一个一个符号的部分,称为“词法分析器”
1.1 =不同于==
1.
if(x=y)
break;
上面的程序中程序员的本意是作比较运算,但是却无意间携程了赋值运算。但是实际上是将y的值付给了x,然后检查该值是否为0.
2.
while(c=' '||c=='\t'||c=='\n'
c=getc(f);
这个例子的本意是跳过文件中的空格符、制表符和换行符.
但是其实是将表达式的值赋给了c,因为’ '不等于0,所以无论c此前是什么值,上述表达式求值的结果都是1,因此循环将一直进行下去直到整个文件介绍。
某些编译器在发现形如e1=e2的表达式出现