Skip to content
Benjamin Kowarsch edited this page Jun 27, 2017 · 23 revisions

M2BSK Modula-2 Bootstrap Kernel Project

Welcome to the Wiki of the M2BSK Modula-2 Bootstrap Kernel Project

Objective

The objective of this project is to develop a bootstrap compiler for the revised Modula-2 language described in "Modula-2 Revision 2010" (Kowarsch and Sutcliffe, 2010-2015).

Purpose

The purpose of the M2BSK compiler is to facilitate bootstrapping of a self-hosting compiler for Modula-2 R10.

Dialects

The M2BSK compiler supports the Bootstrap Kernel (BSK) subset of Modula-2 R10. It does not support the full Modula-2 R10 specification, nor earlier PIM or ISO dialects.

Grammar

The grammar of the compiler is in the project repository

https://github.com/m2sf/m2bsk/blob/master/m2bsk-grammar.gll

For a graphical representation of the grammar, see section Syntax Diagrams.

Targets

The M2BSK compiler will generate classic Modula-2 sources that can be compiled with any Modula-2 compiler that can compile M2BSK. An LLVM backend will be added later to generate LLVM IR.

License

M2BSK is licensed under the GNU Lesser General Public License (LGPL) both v.2.1 and v.3.

Prerequisites

The M2BSK compiler is written in the Modula-2 dialect described in the third and fourth editions of Niklaus Wirth's "Programming in Modula-2". Therefore any Modula-2 compiler that supports PIM3, PIM4 or ISO Modula-2 should be able to compile the sources.

The following libraries from Wirth's "Programming in Modula-2" are required.

  • Storage
  • Terminal
  • FileSystem

These libraries should be part of any PIM Modula-2 compiler's library. For use with ISO Modula-2 compilers, M2BSK provides shim libraries for adaptation to ISO Modula-2 libraries.

There are no dependencies on any third party libraries.

OS support

M2BSK will run on any operating system with target support by the host-compiler.

Collaboration

If you would like to contribute to the project, please get in touch via

Join the chat at https://gitter.im/modula-2/Lobby

or by email

trijezdci (gmail)

+++

Clone this wiki locally