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
-i
or--input
to specify input file-o
or--output
to 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 : #f
S-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 haskeme
clone from GitHub and compile with
cabal
:git clone https://github.com/jumper149/haskeme.git cd haskeme cabal build
clone 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)