Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/redstar/m2lang
The LLVM-based Modula-2 compiler
https://github.com/redstar/m2lang
ast-generator compiler llvm llvm-frontend modula-2 parser-generator
Last synced: 5 days ago
JSON representation
The LLVM-based Modula-2 compiler
- Host: GitHub
- URL: https://github.com/redstar/m2lang
- Owner: redstar
- License: other
- Created: 2019-02-02T21:06:42.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2024-12-20T23:16:25.000Z (17 days ago)
- Last Synced: 2024-12-25T16:13:07.192Z (12 days ago)
- Topics: ast-generator, compiler, llvm, llvm-frontend, modula-2, parser-generator
- Language: C++
- Homepage:
- Size: 1.33 MB
- Stars: 67
- Watchers: 14
- Forks: 10
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
m2lang - The LLVM-based Modula-2 compiler
=========================================[![Build Status](https://img.shields.io/cirrus/github/redstar/m2lang/master?logo=Cirrus%20CI&label=Cirrus%20CI)][1]
Introduction
------------See this [FOSDEM 2019 talk](https://fosdem.org/2019/schedule/event/llvm_irgen/) for some details.
Implementation decisions
------------------------- LLVM is only external dependency
- Uses C++20 modules
- xmake for building
- ISO Modula-2 language first
- Usea "declare-before-use" (single-pass) model
- Goal is target several platforms from the beginningCurrent 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](http://www.zi.biologie.uni-muenchen.de/~enger/SC22WG13/im2c-981130.html#TR-AXI-PRAGMAS)
and aims to be compatible to the [Macintosh p1 compiler](https://modula2.awiedemann.de/manual/comp4.html#L4_2).
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](https://github.com/redstar/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](lib/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.[1]: https://cirrus-ci.com/github/redstar/m2lang "Cirrus CI Build Status"