Skip to content
This repository was archived by the owner on Aug 30, 2022. It is now read-only.

jiacai2050/JCScheme

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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: andใ€ orใ€ not
    • number: +ใ€ -ใ€ *ใ€ /ใ€ >ใ€ <ใ€ =
    • pair/list: consใ€ carใ€ cdrใ€ listใ€ null?
    • string: str=?ใ€
    • other: print

Code snippets can be found in ChangeLog

TODO

License

MIT License ยฉ Jiacai Liu

About

Another Scheme dialect written in Java

Resources

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published

Languages