我正在开发一个类似C的编译器,我想知道编译器是如何与系统一起工作的。
编译器读取整个代码,并将找到的所有包含存储在一个列表中,并在读取完当前代码后解析这些包含。
// file main.c
#include <stdio.h> // store in one list
// continue the parse ...
int main()
{
return 0;
}
// now, read the includes
// after finish the includes parse, gen code of sources
// just a sample
// file stdio.h
#include <types.h> // store in list
#include <bios.h> // store in list
void printf(...)
{
}
void scanf(...)
{
}顺便说一句,我已经开发了一个系统(仅测试)来读取包含,并停止解析,以读取包含...(这是一个令人厌恶的代码,但是,工作...)(示例链接) -> https://gist.github.com/4399601
顺便说一句,阅读收录的最好方法是什么?并使用包含文件??
发布于 2012-12-29 01:11:13
#include、#define、#ifdef等由称为preprocessor的单独过程进行处理。它用包含的文件替换带有#include的行。然后,将生成的临时源文本提供给tokenizer和parser等后续传递。
发布于 2012-12-29 01:09:07
C中任何以#开头的代码行都是由预处理器处理的,而不是编译器。预处理器生成一个文件,然后编译器对其进行编译。文件的内容取决于开发人员和SDK定义的内容。
发布于 2012-12-29 01:17:46
任何以#开头的都是预处理器指令..相应的代码在编译时被替换。编译的第一阶段是这个预处理器编译。
然后,预处理器(.i文件)的输出被提供给编译的后期阶段。
编译的后期阶段包括词法分析器、解析器、优化器和代码生成器。
https://stackoverflow.com/questions/14073031
复制相似问题