printf
(
"Some string here"
,
++
i
++
&&
&
{{ 1}} i
*
*
*
a
)
我很困惑,如何计算此代码段的令牌数量。基本上,我没有得到;
和&&&
的计算方式。
我认为***
是一个标记和&是一个,而&&
总共有3个令牌,但我不确定它是否正确。
我已经用空格编辑了代码来分隔令牌。
有人可以解释任何技术,以便我可以申请任何代码片段吗?
任何帮助将不胜感激!!
答案 0 :(得分:1)
您的分析是正确的。 C中的标记化是贪婪的,这意味着遇到&&&
时,首先扫描最长的标记&&
。 <{1}}令牌没有,因此每个**
字符都是自己的令牌。
令牌是:
*
printf
(
"Some string here"
,
++
i
++
&&
&
i
*
*
*
a
)
答案 1 :(得分:1)
C标记化是&#34;贪婪&#34; - 它首先尝试构建最长的合法令牌。有关合法标点符号列表(&&
,++
等),请参阅online C 2011 draft standard,第6.4.6节(标点符号)。
序列++i++&&&i***a
将被标记为++
,i
,++
,&&
,&
,i
, *
,*
,*
,a
。它将被解析为(++(i++)) && ((&i) * (**a))
,这不是一个合法的表达式(i++
的结果不是左值,因此它不能是一元{{1}的操作数。运营商)。