以下代码片段中的标记数是多少?
What is the number of tokens in the following code snippet?
printf
(
"Some string here"
,
++
i
++
&&
&
i
*
*
*
a
)
;
我很困惑,如何计算此代码段的标记数。基本上,我不知道如何计算 &&&
和 ***
。
我觉得&&
是1个token,&是1个,而***
是3个token,不知道对不对。
我用空格编辑了代码以分隔标记。
有人可以用任何技术解释一下,以便我可以申请任何代码段吗?
任何帮助将不胜感激!!
您的分析是正确的。 C 中的标记化是贪婪的,这意味着当遇到 &&&
时,首先扫描可能的最长标记 &&
。没有 **
个标记,因此每个 *
个字符都是它自己的标记。
代币是:
printf
(
"Some string here"
,
++
i
++
&&
&
i
*
*
*
a
)
;
C 标记化是 "greedy" - 它首先尝试构建最长的合法标记。有关合法标点符号列表(&&
、++
等),请参阅 online C 2011 draft standard 部分 6.4.6(标点符号)。
序列++i++&&&i***a
将被标记为++
、i
、++
、&&
、&
、i
, *
, *
, *
, a
。它将解析为(++(i++)) && ((&i) * (**a))
,这不是一个合法的表达式(i++
的结果不是左值,所以它不能是一元的操作数++
运算符)。
printf
(
"Some string here"
,
++
i
++
&&
&
i
*
*
*
a
)
;
我很困惑,如何计算此代码段的标记数。基本上,我不知道如何计算 &&&
和 ***
。
我觉得&&
是1个token,&是1个,而***
是3个token,不知道对不对。
我用空格编辑了代码以分隔标记。
有人可以用任何技术解释一下,以便我可以申请任何代码段吗?
任何帮助将不胜感激!!
您的分析是正确的。 C 中的标记化是贪婪的,这意味着当遇到 &&&
时,首先扫描可能的最长标记 &&
。没有 **
个标记,因此每个 *
个字符都是它自己的标记。
代币是:
printf
(
"Some string here"
,
++
i
++
&&
&
i
*
*
*
a
)
;
C 标记化是 "greedy" - 它首先尝试构建最长的合法标记。有关合法标点符号列表(&&
、++
等),请参阅 online C 2011 draft standard 部分 6.4.6(标点符号)。
序列++i++&&&i***a
将被标记为++
、i
、++
、&&
、&
、i
, *
, *
, *
, a
。它将解析为(++(i++)) && ((&i) * (**a))
,这不是一个合法的表达式(i++
的结果不是左值,所以它不能是一元的操作数++
运算符)。