程序往往有许多形式。程序员创建的源文件(source file)既供人读,又送往语言转换器,如编译器。典型的编译器将一个或多个源文件转换为目标码(object code)文件。链接器程序(linker program)将分立的目标模块结合起来,产生可重定位,即可执行的文件。最后,由加载器(loader,或称为“加载程序”)—通常就是操作系统—将可执行文件调入内存,对目标码做最后的修改,然后执行。请注意,这时对目标码的修改是在内存中进行的,磁盘上的实际文件毫发未动。这些文件类型并非语言处理系统能操作的全部类型,但它们具有代表性。要充分理解编译器的局限性,就有必要了解语言处理器是怎样加工这些文件类型的。我们先谈谈源文件。