以下代码段中的令牌数量是多少?

时间:2016-10-25 18:04:18

标签: compilation lexical-analysis

printf ( "Some string here" , ++ i ++ && & {{ 1}} i * * * a )

我很困惑,如何计算此代码段的令牌数量。基本上,我没有得到;&&&的计算方式。

我认为***是一个标记和&是一个,而&&总共有3个令牌,但我不确定它是否正确。

我已经用空格编辑了代码来分隔令牌。

有人可以解释任何技术,以便我可以申请任何代码片段吗?

任何帮助将不胜感激!!

2 个答案:

答案 0 :(得分:1)

您的分析是正确的。 C中的标记化是贪婪的,这意味着遇到&&&时,首先扫描最长的标记&&。 <{1}}令牌没有,因此每个**字符都是自己的令牌。

令牌是:

  1. *
  2. printf
  3. (
  4. "Some string here"
  5. ,
  6. ++
  7. i
  8. ++
  9. &&
  10. &
  11. i
  12. *
  13. *
  14. *
  15. a
  16. )

答案 1 :(得分:1)

C标记化是&#34;贪婪&#34; - 它首先尝试构建最长的合法令牌。有关合法标点符号列表(&&++等),请参阅online C 2011 draft standard,第6.4.6节(标点符号)。

序列++i++&&&i***a将被标记为++i++&&&i***a。它将被解析(++(i++)) && ((&i) * (**a)),这不是一个合法的表达式(i++的结果不是左值,因此它不能是一元{{1}的操作数。运营商)。