预处理

✍ dations ◷ 2025-06-28 17:25:22 #预处理
在计算机科学中,预处理器是程序中处理输入数据,产生能用来输入到其他程序的数据的程序。输出被称为输入数据预处理过的形式,常用在之后的程序比如编译器中。所作处理的数量和种类依赖于预处理器的类型,一些预处理器只能够执行相对简单的文本替换和宏展开,而另一些则有着完全成熟的编程语言的能力。一个来自计算机编程的常见的例子是在进行下一步编译之前,对源代码执行处理。在一些计算机语言(例如:C语言)中有一个叫做预处理的翻译阶段。词法预处理器是最低级的预处理器,因为它们只需要词法分析,也就是说,它们在语法分析处理之前,根据用户定义的规则,进行简单的词法单元替换。典型的词法预处理器产生宏替换,包含其他文件的文本,并且条件性地编译或者包含文件。最常见的例子是C预处理器,采用以'#'为行首的指示。因为它不知道底层语言,它的使用被批评并且它的许多功能被其它语言直接内建。例如,宏替换被显式内联和模板替代,包含变为编译期导入(compile-time import,这需要在目标代码中预先保存类型信息,使这个功能无法改进一个语言);条件编译被if-then-else和死代码消除替代。其他词法预处理器包括一般用途的m4,最常用的跨平台构建系统,比如autoconf,和开源的宏处理器GEMA,操作上下文模式。句法预处理器是由Lisp家族语言引进的。它们的作用是根据若干用户定义的规则转换语法树。对于某些程序语言,这些规则是使用同一种语言来写的(compile-time reflection)。这就是Lisp和OCaml的情况。某些编程语言依靠一个完全的外部语言来定义转换,例如XSLT处理器处理XML的方式,或与静态类型的对应语言CDuse。静态处理器常被用来自定编程语言的语法,并透过增加新的primitives或嵌入特定领域语言(Domain-Specific Programming Language)到一般用途的语言里来扩展。关于自定义语法的一个好例子是在OCaml编程语言里两个不同语法的存在。程序可能平常地由“正常语法”或“校正过的语法”写成,并且按需求由两者之一进行程序优化类似地,一些OCaml语言写成的程序借由新运算符的增加来自定化语言的语法。对于从宏扩展语言最好的示例可在LISP语言家族里找到。这种语言本身就是简单的动态类型核心模块,Scheme或Common Lisp的标准分配允许了命令或面向对象的程序编辑,静态类型亦如此。几乎所有这些特性都由语法预处理运行,虽然它的“宏扩展”编译阶段由LISP的编译器处理这点很值得一提就是。这仍然可以视为预处理的一种形式,因为它在编译阶段前就进行了。类似地,静态检查、类型安全正规表式或代码生成可能透过宏被加入到OCaml的语法和语义里,如同微线程(亦称为协程或fibers)、单子或透明的XML操作。任何“一般目的预处理器”,例如M4,都可以当成模版引擎(template engine)使用。

相关

  • 环境自然环境指地球或一些区域上一切生命和非生命的事物以自然的状态呈现。这是一个环境涵盖了所有生物之间的相互作用。 自然环境可分为几个主要组成部分:自然环境是对比建成环
  • 桑黄桑黄(Sanghuangporus sanghuang),又称桑耳、桑臣,为锈革菌科桑黄属的物种,也是桑黄孔菌属的模式种。本种生长于桑属植物的树干上。具有抗氧化、抗发炎、提升免疫力、抗癌、护肝、
  • 纽约总部联合国总部大楼(亦称联合国大厦)是联合国总部的所在地,位于美国纽约市曼哈顿区东侧,属于国际领土,因此只要是会员国国民持有护照就可以进入,包括与美国无邦交的联合国会员国。从联
  • 4第4周期元素是元素周期表中第四行(即周期)的元素。含有:第1周期元素 - 第2周期元素 - 第3周期元素 - 第4周期元素 - 第5周期元素 - 第6周期元素 - 第7周期元素 - 第8周期元素
  • A07EAA·B·C·D·G·H·QI·J·L·M·N·P·R·S·VATC代码A07(止泻药,肠道抗炎/抗感染药)是解剖学治疗学及化学分类系统的一个药物分组,这是由世界卫生组织药物统计方法整合中心(The
  • 环己烷构象环己烷构象主要研究环己烷及其相关衍生物的构象,是构象分析的重要内容。很早就有人提出环己烷可能不是平面型结构。1890年,德国人赫尔曼·萨克森(Hermann Sachse)提出通过折纸来
  • 诉诸无知诉诸无知(拉丁语:argumentum ad ignorantiam;英语:argument from ignorance 或 argument by lack of imagination)是一种逻辑谬误,主张由于一件事未被证明是假的,因此它是真的;或者,
  • 杭州公共自行车杭州公共自行车交通系统,是中国浙江省杭州市杭州公交集团下属的公共自行车发展服务有限公司营运的一个公益性公众交通项目。该服务在中国国内尚无先例,与法国公共自行车系统V
  • 乌瑟卡拉乌瑟卡拉(Userkare)是埃及第六王朝的第二位法老,可能以不正常手段登位,在位时间短促,后来由前任法老特提之子佩皮一世取代。托勒密时期的历史学家曼涅托记载特提被自己的卫队杀害
  • 微分拓扑微分拓扑是一个处理在微分流形上的可微函数的数学领域。很自然地,它是在研究微分方程理论的过程中被提出来的。微分几何是用微积分来研究几何的学问。这些领域非常接近,在物理