197

GitHub - mattn/anko: Scriptable interpreter written in golang

 5 years ago
source link: https://github.com/mattn/anko
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

anko

GoDoc Reference Build Status Coverage Go Report Card

Anko is a scriptable interpreter written in Go.

(Picture licensed under CC BY-SA 3.0 by wikipedia)

Installation

Requires Go.

$ go get -u github.com/mattn/anko

Examples

# declare function
func plus(n){
  return n + 1
}

# declare variables
x = 1
y = x + 1

# print values
println(x * (y + 2 * x + plus(x) / 2))

# if/else condition
if plus(y) > 1 {
  println("こんにちわ世界")
} else {
  println("Hello, World")
}

# array type
a = [1,2,3]
println(a[2])
println(len(a))

# map type
m = {"foo": "bar", "far": "boo"}
m.foo = "baz"
for k in keys(m) {
  println(m[k])
}

See _examples/scripts for more examples.

Usage

Embedding the interpreter into your own program:

var env = vm.NewEnv()

env.Define("foo", 1)
env.Define("bar", func() int {
	return 2
})

val, err := env.Execute(`foo + bar()`)
if err != nil {
	panic(err)
}

fmt.Println(val)
// output:
// 3

To import all core language builtins, allowing the example scripts to work:

import "github.com/mattn/anko/core"

var env = vm.NewEnv()
core.Import(env)

_, err := env.Execute(`println("test")`)
if err != nil {
	panic(err)
}
// output:
// "test"

Running scripts using anko command-line tool:

$ anko script.ank

Author

Yasuhiro Matsumoto (a.k.a mattn)

Note

Please note that the master branch is not stable, the language and API may change at any time.

To mitigate breaking changes, please use tagged branches. New tagged branches will be created for breaking changes.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK