Oberon/编译器
此文档最初托管在 ETHZ。它保留在 ETH 许可证 下,并且在 WayBack 存档 中。
名称 | 技术 | 支持的语言 | 特点 | 前端作者 | 后端作者 |
---|---|---|---|---|---|
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 项目的背景下编写的,虽然不再维护,但仍然可以下载
- MacOberon - Motorola 680x0
- SPARC-Oberon - Sun SPARC
- 用于 Amiga 的 Oberon - Motorola 680x0
- POWERoberon - IBM RISC System/6000
- HP-Oberon - HP Apollo Series 700
- Power MacOberon - PowerPC
为 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 文本。转换后的文本将替换原始文本。
- Hostess:Oberon 编译器测试套件 [ hostess.sourceforge.net ]
- 编译器选项
- 陷阱编号 (仅限增强版 OP2 和 Paco)
- ETH 技术报告 125:R. Crélier;OP2:一个可移植的 Oberon 编译器 [ PDF。打开 ETH 技术报告页面 并搜索“Portable Oberon” ]
- 编译器构造,作者:Niklaus Wirth
- 汇编语言编程艺术
- 汇编语言 维基教科书。
- 原生 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/