编译的哪一步删除了注释?

时间:2015-12-05 23:50:25

标签: compiler-construction compilation

There are several steps in compilation of a program

  • 线重建
  • 词法分析
  • 预处理。
  • 语法分析
  • 语义分析

在第一步"行重建"?

中删除注释

2 个答案:

答案 0 :(得分:4)

  • 预处理是一个自己的阶段,它有自己的扫描和解析,在词法分析之前。
  • 我是编译器编写者,我从未听说过'线重建'。编译器不处理行:它们处理令牌流。你的引文明确指出这是几种奇怪语言的特例。
  • 您已经省略了流量分析,优化,寄存器分配和代码生成等等。
  • 在词法分析期间忽略忽略,而不是删除,有时在概念上将其描述为“筛选”和“扫描”,在这种情况下,您可以说评论被筛选出来,例如空格。

答案 1 :(得分:1)

我要回答记住C编译器的问题。在大多数编译器中通常都是这种情况,但我要提供的示例将是C编译器。

在线重建阶段之后删除注释,并且在词法分析阶段通常会忽略注释。可以通过这种方式进行快速验证。请考虑以下代码:

printf("Hello "); // *************\
printf("World");  // I like boxes!\
printf("!\n);     // ^^^^^^^^^^^^^\

当C编译器发现反斜杠后面紧跟一个新行时,行重建阶段会将其转换为一行。

你可以弄清楚上面的代码会产生什么结果!

设计选择是因为它与我们期望的行为一致,必须始终连接新行后面的反斜杠。

然而,词法分析阶段涉及标记化。在对代码进行标记以进行进一步处理时,此阶段可以方便地忽略注释。所以当下一个阶段被调用时,评论将会丢失!

希望这澄清一下! :)

P.S。:来源!

That line-reconstruction takes place before comments are even analysed

That comments are ignored during lexical analysis