跳转到内容

Oberon/编译器

来自维基教科书,开放世界中的开放书籍

此文档最初托管在 ETHZ。它保留在 ETH 许可证 下,并且在 WayBack 存档 中。

Oberon 编译器和语言参考材料
 
编译器概述
名称 技术 支持的语言 特点 前端作者 后端作者
Ceres 单遍递归下降解析器,直接代码生成 Oberon N. Wirth, J. Gutknecht NS32xxx: N. Wirth
ARM: N. Wirth[1]
StrongARM: A. Signer
OberonSA 单遍递归下降解析器,直接代码生成 OberonSA = Oberon 子集 N. Wirth OLGA: N. Wirth
NOSAP 单遍递归下降解析器,直接代码生成 OberonSA 扩展 M. Sanvido OLGA: M. Sanvido
OP2 单遍递归下降解析器,生成中间解析树 Oberon, Oberon-2 细粒度指纹识别,[2] 前端 + 后端架构 (1989) R. Crelier (1989) MIPS: R.Crelier
(1989) i386: N. Mannhart
(1989) 68000: M. Franz
(1989) SPARC: J. Templ
(1990) Amiga: S. Ludwig, C. Nieder, R Degner
(1991) Power: M. Brandis
(1991) PA-RISC: J. Supcik
(1994) PowerPC: T. Kistler, A. Wuerz - Uni Linz
(1994) OMI: M. Franz, T. Kistler
(1995) DEC/HP Alpha (64 位):[3] Guenter Dotzel, Hartmut Goebel, Peter Pirkelbauer, Don Ward[4]
增强版 OP2 单遍递归下降解析器,中间解析树 Oberon, Oberon-2, Oberon-X, Active Oberon, 嵌入式汇编器 细粒度指纹识别,前端 + 后端架构 R. Crelier, P. Reali - 添加 i386: P. Reali
SPARC: G. Feldmann (添加)
Paco 单遍递归下降,范围并发解析器 Oberon, Active Oberon, 嵌入式汇编器 前端 + 后端架构,动态可插拔代码生成器,并发 P. Reali Paco 的 i386: P. Reali,
StrongARM: B. Egger
Oberon.Net 单遍递归下降解析器 用于 .net 的 Active Oberon J. Gutknecht, B. Smith-Mannschott, H.P. Hoegger, P. Kramer, T. Frey 后端:MS-IL
Hyperstone Oberon 两遍前端 + 后端编译器 Oberon H.P. Hoegger Hyperstone: P. Kramer
内核: T. Frey, O. Joos
OP2 T800 交叉编译器 单遍递归下降解析器;生成中间解析树。 Oberon-2 缺少细粒度指纹识别。缺少元编程 (1989) R. Crelier (1994) Stephane Micheloud;[5]
维护端口中的编译器部署 - 下载信息
操作系统 ETH Oberon 端口 前端 后端 B.E. 维护者
原生 原生 Oberon 增强版 OP2 i386 Patrik Reali
Linux Linux 原生 Oberon (LNO) Peter Matthias
用于 Linux x86 的 Oberon Günter Feldmann
用于 Linux PPC 的 Oberon PPC
Solaris 用于 Solaris x86 的 Oberon i386
用于 Solaris SPARC 的 Oberon SPARC
MacOs X 用于 Mac OS X 的 Oberon PPC
Windows 用于 Windows 的 PlugIn Oberon i386
Bluebottle 用于 Bluebottle 的 Oberon Paco Paco 的 i386 Patrik Reali
Paco 的 ARM Bernhard Egger
增强版 OP2 i386 Patrik Reali

前端维护者

  • 增强版 OP2,Paco (并行编译器): Patrik Reali

OP2 和 Paco 之间的区别

Paco 在以下方面与 OP2 不同

  • Paco 是一个用 Active Oberon 编写的全新编译器。它依赖于活动对象执行:每个范围都由一个解析器对象并发解析。目前这并不更快,但简化了前向引用的处理。
  • 语言支持:不支持 Oberon-2,对 Oberon-X 的支持有限(半动态数组,用户定义的返回值类型)
  • 中间表示:接近 SSA 形式的低级汇编程序式表示(无限寄存器,分配一次)。
  • 后端:热插拔后端(目前为 i386 和 StrongARM)

关于用于 LinuxPPC 和 MacOs X 的 PowerPC 编译器的说明

在增强版 PowerPC 编译器(在 2.3.8 版本中引入)中,集合的位顺序与其他编译器(x86、SPARC 等)兼容(SYSTEM.VAL(LONGINT, {0}) = 1)。

旧的 PowerPC 编译器(用于 MacOberon 和 PowerOberon (V4)(见下文))以反向位顺序表示集合({0} = 2^31)。这使得带有类型强制转换的混合整数和集合操作(在加密算法中被大量使用)不可移植。这可能是模块 BIT 要克服这种不兼容性的目标之一。但使用模块 BIT 使算法可读性降低,效率也降低。

不再更新的端口中的编译器部署 - 下载信息
操作系统 ETH Oberon 端口 前端 后端
原生 用于 DNARD 的 SharkOberon Ceres ARM
基于 DOS 的原生 Oberon 增强版 OP2 i386
Windows 用于 Windows 的 Oberon 增强版 OP2 i386
Windows 3.x 用于 Windows 的 Oberon System 3 OP2 i386 + OMI
MacOs MacOberon System 3 OP2 PPC / 68000 + OMI
MacOs 6.x 到 9.x MacOberon OP2 PPC + OMI
HP-UX 用于 HP-UX 的 Oberon System 3 OP2 PA-RISC

关于 Slim Binaries 的说明,通常称为“OMI”

OMI 现在已经成为历史,并且没有在当前的 ETH Oberon 系统中实现。这项非常有趣技术没有集成到新编译器中,因为我们多次改变了语言,这需要对编译器进行一些深层的更改。我们拥有的 OMI 实现(现在仍然存在)针对 OP2 解析树进行了优化,以至于更改解析树或符号表中的任何内容都会破坏或损害它,并且应该首先对其进行去优化甚至为新的解析树重写。无论如何,这仍然是可能的,并且很有趣,让某人接管 OMI 代码并将其调整为用于 Active Oberon 的扩展符号表和解析树。

一些较早的端口是在 Oberon V4 项目的背景下编写的,虽然不再维护,但仍然可以下载

Oberon 语言报告和相关文档
为 ETH Oberon 编写或修改的文档 网络 包含在发行版中
Oberon 编程语言(报告) html OberonReport.html, OberonReport.ps
Oberon EBNF html OberonEBNF.ps
模块 SYSTEM html
Active Oberon 语言扩展 html
Active Oberon 语言报告 html
用于 .net 的 Active Oberon 白皮书 MS Word 文档
Oberon-X 扩展 html
Oberon Kurs,作者:Günther Sawitzki html
Oberon 简介,作者:Günther Sawitzki html
为 Oberon V4 编写的文档 Postscript gnu-comp V4 文本 [1] TeX HTML
来自 Modula Oberon(报告) ps ps.gz 文本
Oberon 编程语言(报告) ps ps.gz 文本 这里
Oberon EBNF ps ps.gz 文本
Oberon-2 编程语言(报告) ps ps.gz 文本 Excelsior UCSD
UUlm
Oberon 和 Oberon-2 之间的区别 ps ps.gz 文本
Oberon-2 变更列表 ps ps.gz 文本 这里
Oberon-2 中的面向对象编程 ps ps.gz 文本
Oberon 指南 - 系统版本 1.2 ps ps.gz 文本

说明 [1]:传统的浏览器无法显示 Oberon 文本文件。在 V4 中,它由编辑器显示。在 ETH Oberon 中,打开后,必须通过执行 WTS.Convert Temp.FTP.Text 将文本转换为 ETH Oberon 文本。转换后的文本将替换原始文本。

语言示例
编译器文档和资源
书籍
目标文件格式
  • 原生 2.3.6 及更早版本 [ html | pdf ]
  • 原生 alpha 和 beta 版本,2.3.7 Unix 版本 [ html | pdf ]
  • Aos/Bluebottle 版本,2006 年 11 月 17 日及以后 [ html | pdf ]
英特尔文档
如何为新的体系结构编写后端

根据我们的经验,为新的体系结构编写一个简单的 Wirth 式编译器相对容易。例如,A. Signer(当时还是一名学生)为 StrongARM 编写了编译器后端,并在四个月内移植了 ETH Oberon 系统。

Wirth 编译器的优势在于它基于一些固定的代码模式,这些代码模式直接生成,而无需先构建程序的内部表示。这简化了设计。

Paul Reed 将代码模式过程更改为回调,这使他能够插入不同的代码生成器。

当然,在支持内部中间形式的编译器(如 OP2)中实现优化更容易,但增加的复杂性只有在你实际有时间学习和实现优化算法的情况下才能得到回报。

规范版本位于ftp://ftp.ethoberon.ethz.ch/Oberon/Books/ProjectOberon/ [已过期]

2002年10月28日 - 版权所有 © 2002 瑞士联邦理工学院苏黎世。保留所有权利。
电子邮件:oberon at lists.inf.ethz.ch
主页:http://www.ethoberon.ethz.ch/

参考资料

[编辑 | 编辑源代码]
华夏公益教科书