fbpx
维基百科

预处理器

计算机科学中,预处理器(英語:Preprocessor)是程序中处理输入数据,产生能用来输入到其他程序的数据的程序。输出被称为输入数据预处理过的形式,常用在之后的程序比如编译器中。所作处理的数量和种类依赖于预处理器的类型,一些预处理器只能够执行相对简单的文本替换和巨集展开,而另一些则有着完全成熟的编程语言的能力。

一个来自计算机编程的常见的例子是在进行下一步编译之前,对源代码执行处理。在一些计算机语言(例如:C语言)中有一个叫做预处理翻译阶段。

词法预处理器 编辑

词法预处理器是最低级的预处理器,因为它们只需要词法分析,也就是说,它们在语法分析处理之前,根据用户定义的规则,进行简单的词法单元替换。典型的词法预处理器产生宏替换,包含其他文件的文本,并且条件性地编译或者包含文件。

C预处理器 编辑

最常见的例子是C预处理器,采用以'#'为行首的指示。因为它不知道底层语言,它的使用被批评并且它的许多功能被其它语言直接内建。例如,巨集替换被显式内联和模板替代,包含变为编译期导入(compile-time import,这需要在目标代码中预先保存类型信息,使这个功能无法改进一个语言);条件编译被if-then-else和死代码消除替代。

其他预处理器 编辑

其他词法预处理器包括一般用途的m4,最常用的跨平台构建系统,比如autoconf,和开源的巨集处理器GEMA,操作上下文模式。

句法预处理器 编辑

句法预处理器是由Lisp家族语言引进的。它们的作用是根据若干用户定义的规则转换语法树。对于某些程序语言,这些规则是使用同一种语言来写的(compile-time reflection)。这就是LispOCaml的情况。某些程式語言依靠一個完全的外部語言來定義轉換,例如XSLT處理器處理XML的方式,或與靜態類型的對應語言CDuse。

靜態處理器常被用來自定程式語言的語法,並透過增加新的primitives或嵌入特定領域語言到一般用途的語言裡來擴充。

自定義語法 编辑

關於自定義語法的一個好例子是在OCaml程式語言裡兩個不同語法的存在。[1]程式可能平常地由「正常語法」或「校正過的語法」寫成,並且按需求由兩者之一進行程式優化

類似地,一些OCaml語言寫成的程式藉由新運算符的增加來自定化語言的語法。

擴充語言 编辑

對於從巨集擴充語言最好的範例可在LISP語言家族裡找到。這種語言本身就是簡單的動態類型核心模塊,SchemeCommon Lisp的標準分配允許了命令或物件導向的程式編輯,靜態類型亦如此。幾乎所有這些特性都由語法預處理執行,雖然它的「巨集擴充」編譯階段由LISP的編譯器處理這點很值得一提就是。這仍然可以視為預處理的一種形式,因為它在編譯階段前就進行了。

類似地,靜態檢查、類型安全正規表式代碼生成可能透過巨集被加入到OCaml的語法和語義裡,如同微線程(亦稱為協程纖程)、單子或透明的XML操作。

語言專門化 编辑

作為模板引擎的預處理器 编辑

任何「一般目的預處理器」,例如M4,都可以當成模版引擎(template engine)使用。

参考文献 编辑

  1. ^ The Revised syntax Archive-It的存檔,存档日期2015-09-24 from The Caml language website

外部链接 编辑

预处理器, 在计算机科学中, 英語, preprocessor, 是程序中处理输入数据, 产生能用来输入到其他程序的数据的程序, 输出被称为输入数据预处理过的形式, 常用在之后的程序比如编译器中, 所作处理的数量和种类依赖于的类型, 一些只能够执行相对简单的文本替换和巨集展开, 而另一些则有着完全成熟的编程语言的能力, 一个来自计算机编程的常见的例子是在进行下一步编译之前, 对源代码执行处理, 在一些计算机语言, 例如, c语言, 中有一个叫做预处理的翻译阶段, 目录, 词法, 其他, 句法, 自定義語法, 擴充語. 在计算机科学中 预处理器 英語 Preprocessor 是程序中处理输入数据 产生能用来输入到其他程序的数据的程序 输出被称为输入数据预处理过的形式 常用在之后的程序比如编译器中 所作处理的数量和种类依赖于预处理器的类型 一些预处理器只能够执行相对简单的文本替换和巨集展开 而另一些则有着完全成熟的编程语言的能力 一个来自计算机编程的常见的例子是在进行下一步编译之前 对源代码执行处理 在一些计算机语言 例如 C语言 中有一个叫做预处理的翻译阶段 目录 1 词法预处理器 1 1 C预处理器 1 2 其他预处理器 2 句法预处理器 2 1 自定義語法 2 2 擴充語言 2 3 語言專門化 3 作為模板引擎的預處理器 4 参考文献 5 外部链接词法预处理器 编辑词法预处理器是最低级的预处理器 因为它们只需要词法分析 也就是说 它们在语法分析处理之前 根据用户定义的规则 进行简单的词法单元替换 典型的词法预处理器产生宏替换 包含其他文件的文本 并且条件性地编译或者包含文件 C预处理器 编辑 最常见的例子是C预处理器 采用以 为行首的指示 因为它不知道底层语言 它的使用被批评并且它的许多功能被其它语言直接内建 例如 巨集替换被显式内联和模板替代 包含变为编译期导入 compile time import 这需要在目标代码中预先保存类型信息 使这个功能无法改进一个语言 条件编译被if then else和死代码消除替代 其他预处理器 编辑 其他词法预处理器包括一般用途的m4 最常用的跨平台构建系统 比如autoconf 和开源的巨集处理器GEMA 操作上下文模式 句法预处理器 编辑句法预处理器是由Lisp家族语言引进的 它们的作用是根据若干用户定义的规则转换语法树 对于某些程序语言 这些规则是使用同一种语言来写的 compile time reflection 这就是Lisp和OCaml的情况 某些程式語言依靠一個完全的外部語言來定義轉換 例如XSLT處理器處理XML的方式 或與靜態類型的對應語言CDuse 靜態處理器常被用來自定程式語言的語法 並透過增加新的primitives或嵌入特定領域語言到一般用途的語言裡來擴充 自定義語法 编辑 關於自定義語法的一個好例子是在OCaml程式語言裡兩個不同語法的存在 1 程式可能平常地由 正常語法 或 校正過的語法 寫成 並且按需求由兩者之一進行程式優化類似地 一些OCaml語言寫成的程式藉由新運算符的增加來自定化語言的語法 擴充語言 编辑 對於從巨集擴充語言最好的範例可在LISP語言家族裡找到 這種語言本身就是簡單的動態類型核心模塊 Scheme或Common Lisp的標準分配允許了命令或物件導向的程式編輯 靜態類型亦如此 幾乎所有這些特性都由語法預處理執行 雖然它的 巨集擴充 編譯階段由LISP的編譯器處理這點很值得一提就是 這仍然可以視為預處理的一種形式 因為它在編譯階段前就進行了 類似地 靜態檢查 類型安全正規表式或代碼生成可能透過巨集被加入到OCaml的語法和語義裡 如同微線程 亦稱為協程或纖程 單子或透明的XML操作 語言專門化 编辑作為模板引擎的預處理器 编辑任何 一般目的預處理器 例如M4 都可以當成模版引擎 template engine 使用 参考文献 编辑 The Revised syntax Archive It的存檔 存档日期2015 09 24 from The Caml language website外部链接 编辑DSL Design in Lisp Programming from the bottom up 页面存档备份 存于互联网档案馆 The Generic PreProcessor 页面存档备份 存于互联网档案馆 Gema the General Purpose Macro Processor 页面存档备份 存于互联网档案馆 The PIKT piktc 页面存档备份 存于互联网档案馆 text script and configuration file preprocessor 页面存档备份 存于互联网档案馆 minimac a minimalist macro processor 页面存档备份 存于互联网档案馆 Java Comment Preprocessor 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title 预处理器 amp oldid 76236482, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。