Skip to content

defined1007/autumn

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Autumn

Build Status codecov license platform

An easy interpreter to learn.

example

Features

  • Modern C++ style(Based on C++17)
  • Support Linux and MacOS
  • Full comments
  • Support debug in repl

example2

  • Higher-order functions supported

example3

  • Closure supported

example4

  • ...

Quick Start

Install GCC8

  • Centos
$ yum install readline-devel.x86_64
$ yum install -y devtoolset-8-toolchain
$ scl enable devtoolset-8 bash
  • Ubuntu
$ sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
$ sudo apt-get update -qq
$ sudo apt-get install -qq g++-8
$ apt-get install lib64readline-dev
$ export CXX="g++-8"
$ export CC="gcc-8"

Build & Test

$ make

Repl

  • lexer mode
$ ./autumn lexer
  • parser mode
$ ./autumn parser
  • debug in parser mode
$ DEBUG_AUTUMN=1 ./autumn parser
  • eval mode
$ ./autumn eval

Demo

An example below showing how to write quick sort.

  • You need a filter function
let filter = fn(arr, f) {
    let iter = fn(arr, accumulated) {
        if (len(arr) == 0) {
            accumulated
        } else {
            let e = if (f(first(arr))) {
                push(accumulated, first(arr));
            } else {
                accumulated
            }
            iter(rest(arr), e);
        }
    };
    iter(arr, []);
};
  • QuickSort
let quickSort = fn(arr) {
    if (len(arr) == 0) {
        return arr;
    } else {
        let head = first(arr);
        let smaller = filter(rest(arr), fn(x) { x <= head });
        let bigger = filter(rest(arr), fn(x) { x > head });
        return quickSort(smaller) + [head] + quickSort(bigger);
    }
}
let a = [4,5,3,4,6,6]
quickSort(a)

example5

Contributor

Allen.

License

This project maintained under BSD 2.

Contact

QQ Group for Autumn: 985682510 QQ Group for Linuxers: 610441700

References

About

An interpreter to learn

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 99.0%
  • Other 1.0%