Another Scheme dialect written in Java
Java
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
.gitignore
ChangeLog.md
README.md
pom.xml

README.md

JCScheme

The very first toy language I wrote for studying the essence of programing language.

JCScheme = Jiacai's Scheme 😊

Concepts

1. S-expression

JCScheme use S-expression internally to represent AST like any other Scheme.

FYI, diagram below is the S-expression of (+ 1 2 (* 3 4)) behind SExpression.java. AST_demo

2. eval-apply cycle

As for evaluating code, JCScheme models after eval-apply cycle described in SICP 4.1

eval-apply cycle

More explanations can be found in my Chinese blog 《我的第一个玩具语言 JCScheme 问世了》

Install

git clone git@github.com:jiacai2050/JCScheme.git
cd JCScheme; mvn clean package
java -jar target/JCScheme-*.jar

You can install rlwrap to support line editing, persistent history and completion.

# ubuntu
sudo apt-get install rlwrap
# centos
sudo yum install rlwrap
# Mac
brew install rlwrap  # for Homebrew
port install rlwrap  # for MacPorts

Then, run JCScheme like this

rlwrap java -jar target/JCScheme-*.jar

Syntax

  1. datatype
    • number
    • bool
    • string
    • pair
    • list
    • function
  2. builtin keywords
    • if
    • def
    • lambda
  3. builtin functions
    • bool: andornot
    • number: +-*/><=
    • pair/list: conscarcdrlistnull?
    • string: str=?
    • other: print

Code snippets can be found in ChangeLog

TODO

License

MIT License © Jiacai Liu