Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xixixao/malice
Down-to-assembly compiler written in MetaCoffee
https://github.com/xixixao/malice
Last synced: 8 days ago
JSON representation
Down-to-assembly compiler written in MetaCoffee
- Host: GitHub
- URL: https://github.com/xixixao/malice
- Owner: xixixao
- Created: 2014-01-04T11:44:54.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2014-01-04T11:51:01.000Z (about 11 years ago)
- Last Synced: 2024-11-14T20:47:48.449Z (2 months ago)
- Language: CoffeeScript
- Size: 1.01 MB
- Stars: 0
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
This assignment is no longer used at Imperial, so I decided to publish our solution. It's a compiler for made up language called MAlice (see langspec/malice_milestone2_spec.md), which compiles given plaintext source code into x86 assembly. I wish we were allowed to compile down to LLVM, but this would prevent us to handroll some of the assembly optimizations (think register allocation).
This is an example of how [MetaCoffee](https://github.com/xixixao/meta-coffee/) and/or [CoffeeScript](http://coffeescript.org) can be used to write a full-blown down-to-assembly compiler.
# MAlice Milestone 2
## Overview
Main file is `src/main.coffee`,
parser (includes lexing) is defined in `src/parser.metacoffee`,
semantic analyser is defined in `src/semantics.metacoffee`.We are using the top-down parser generator tool called MetaCoffee
(https://github.com/xixixao/meta-coffee/ - I am still working on full
documentation) similar to PEG.js (https://github.com/dmajda/pegjs) for both
parsing of the input MAlice code and traversing the AST.## File Structure
Makefile
- Invoke build by running `make`
compile
- Launch script, executes src/main.js with Node.js
src/
main.coffee
- Main entry point of the compiler / CLI
parser.metacoffee
- Grammar definitions and AST generation
semantics.metacoffee
- Semantic analysis / error checking
loadMetaCoffee.coffee
- Initializes parser and semantics with MetaCoffee base
colorConsole.coffee
- Removes colors from console output if redirected
errorprinter.coffee
- Pretty printer for compile-time errors
lib/
node_modules/
bin/
- stores JavaScript files built by make