Description
Compiler from I- to S-Expressions for the Scheme Programming Language.
Description
This compiler translates Scheme source code written with I-Expressions (indented expressions) into S-Expressions (symbolic expressions).
README.md
haskeme
This compiler translates Scheme source code written with I-Expressions (indented expressions) into S-Expressions (symbolic expressions).
Usage
Haskeme can read and write files:
haskeme --input "program.hss" --output "program.ss"
Haskeme can also use StdIn and StdOut:
cat "program.hss" | haskeme > "program.ss"
Options
-ior--inputto specify input file-oor--outputto specify output file
I-Expressions
I-Expressions are indented expressions and are translated by few simple rules:
- a new line translates to a new S-Expression
- same indentation as the expression above translates to a new S-Expression following the prior one
- more indentation as the expression above translates to a new S-Expression as an argument to the prior one
- less indentation as the expression above, but still more indentation as another expression above translates to a new S-Expression, while the prior and further indented block gets wrapped in extra parentheses (look at the
let-example) - S-Expression can be mixed in while staying in a single line (look at the example for mixed expressions)
- full line comments starting with
;are ignored - a new line can be prevented from being turned into an S-Expression by prepending it with
:after the indent (look at the example for prevented expressions)
Example
I-Expressions:
define f lambda x let y * x x if > x 0 + y 1 : #fS-Expressions:
(define f (lambda (x) (let ((y (* x x))) (if (> x 0) (+ y 1) #f))))mixed I- and S-Expressions:
define f lambda (x) let y (* x x) if (> x 0) + y 1 : #f
Install
install from Hackage with
cabal:cabal install haskemeclone from GitHub and compile with
cabal:git clone https://github.com/jumper149/haskeme.git cd haskeme cabal buildclone from GitHub and compile with
ghc(not recommended, use this PKGBUILD as a template)install from AUR (only ArchLinux-Users)
Dependencies
ghc(make)cabal(opt. make)