Skip to content

redstar/m2lang

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

m2lang - The LLVM-based Modula-2 compiler

Build Status Build Status

Introduction

See this FOSDEM 2019 talk for some details.

Implementation decisions

  • LLVM is only external dependency
  • CMake scripts derived from clang
  • ISO Modula-2 language first
  • Use "declare-before-use" (single-pass) model
  • Goal is target several platforms from the beginning

Current status

  • The lexer is done.
  • The preprocessor (for handling of directives) is is based on the draft technical report "Interfacing Modula-2 to C", Annex B and aims to be compatible to the Macintosh p1 compiler. Parsing of directives is implemented, with mostly no functionality.
  • The parser is based on ISO Modula-2 with generic and OO additions. Some LL(1) conflicts are still left in the grammar, so not every source is parsed correctly.
  • The parser is generated by LLtool. A C++ port of LLtool is now integrated into this project, but not yet enabled.
  • Error recovery in the parser is based on "panic mode", using the follow sets of the current and the active callers.
  • The AST nodes are generated by ASTtool.
  • Error messages are outputted using llvm::SourceMgr for nice presentation.
  • Only a dummy driver exists to see the parser in action.
  • A couple of IR statements is emitted to the console after succesful parsing.