来自K& R的“The C Programming Language”一书:
有六类令牌:标识符,关键字,常量, 字符串文字,运算符和其他分隔符。下面描述的空白,水平和垂直制表符,换行符,换页符和注释(统称为“空格”)将被忽略,除非它们分隔令牌。
“其他分隔符”是什么意思?
假设给出了一个声明:
result = (4 * b - a * b) / 3;
因此,根据定义,result
,a
和b
应为标识符,=
,(
,)
,{ {1}},*
和/
应该是运营商。分号-
怎么样?它被认为是一种象征,如果是,它属于哪一类?
另外,对于白色空间,它们被认为是“其他分隔符”吗?
答案 0 :(得分:3)
什么是分隔符?
任何可用于分隔令牌的东西。例如
,
示例
int a, b, c;
操作员也可以充当分隔符
a = b*c;
*
是算术运算符,也是分隔符。它会在标记化中分隔两个标识b
和c
。
分号
;
怎么样?它被认为是一种象征,如果是,它属于哪一类?
;
也是一个分隔符。它将一个陈述与另一个陈述分开,从而将其分开。
答案 1 :(得分:3)
运算符和其他分隔符之间的区别在旧版本的C中已存在,但已被删除。
C89标准给出了操作员和标点符号的列表(标点符号是K& R所称的"其他分隔符"):
operator: one of
[ ] ( ) . ->
++ -- & * + - ~ ! sizeof
/ % << >> < > <= >= == != ^ | && ||
? :
= *= /= %= += -= <<= >>= &= ^= |=
, # ##
punctuator: one of
[ ] ( ) { } * , : = ; ... #
运算符被定义为指定要执行的操作的东西,而标点符号具有语法意义但不指定产生值的操作。
请注意,( ) [ ]
被视为运算符(在表达式中使用时)或标点符号(例如在函数或数组声明中)。
C99标准消除了这种不必要的区别,并调用所有这些符号&#34;标点符号&#34;。
关于空白区域,它不被视为令牌,因此不是操作员或标点符号。
答案 2 :(得分:1)
(6.4) token:
keyword
identifier
constant
string-literal
punctuator
有关上述内容的详细信息,请参见第6.4章。虽然如果你继续阅读相同(略微有趣)的附件,你会看到这个:
A.1.7 Punctuators
(6.4.6) punctuator: one of
[ ] ( ) { } . ->
++ -- & * + - ~ !
/ % << >> < > <= >= == != ^ | && ||
? : ; ...
= *= /= %= += -= <<= >>= &= ^= |=
, # ##
<: :> <% %> %: %:%:
如果您对这些事情感兴趣(即使对于资深的C程序员来说,它们远非必要的知识,除非您正在编写编译器),我建议您下载该标准的草案版本并阅读附录A.