以下C语句中的令牌数是多少?
printf("i = %d, &i = %x", i, &i);
答案是10,请解释为什么会这样?
我从http://www.c4learn.com/c-programming/c-tokens-keywords-identifiers/和https://msdn.microsoft.com/en-us/library/c6sb2c6b.aspx以及我的意见中搜索了9。
printf
- 1
()
- 2
"i = %d, &i = %x"
- 1
,
- 2
i,&i
- 2
;
- 1
总= 1 + 2 + 1 + 2 + 2 + 1 = 9
我是c的新手所以请帮帮我
答案 0 :(得分:4)
只需在所有内容之间放置一个空格,以便语义中没有任何变化:
printf ( "i = %d, &i = %x" , i , & i ) ;
然后计算空格之间的部分:10个标记!请注意,令牌类似于自然语言中的“单词”,点等。它们与语义无关(它是解析器的一部分)。
请注意,这并不仅仅与C有关(除了令牌有效),但通常用于处理任何语言。阅读编译器构造。有一些好书(例如N. Wirth的经典可以免费下载)
答案 1 :(得分:2)
如果没有我们面前的C语言的词法规范,在这个陈述中真的不能说出正确的令牌数量,但是快速估计你可能得到这样的东西:
printf("i = %d, &i = %x", i, &i);
1. printf - Identifier
2. ( - Left Parenthesis
3. " - String start (all subtokens count as one)
3.1 i
3.2 =
3.3 %
3.4 d
3.5 &
3.6 i
3.7 equals
3.8 %
3.9 x
3.10 " - string termination
4. , - comma (arguments separator)
5. i - Identifier
6. , - comma (arguments separator)
7. & - address of operator
8. i - Identifier
9. ) - Right Parenthesis
10. ; - Statement delimiter
3
下的所有内容都标记了一个字符串,我刚刚将其整理出来,以便让您更清楚一点。
要获得比我们的猜测更具权威性的答案,您可以在文件中写下您想要的任何内容,例如experiment.c
,然后让clang
输出带有clang --cc1 -dump-tokens experiment.c
的令牌
答案 2 :(得分:0)
以下是令牌 - >