cmd/scpt | ||
.gitignore | ||
ast.go | ||
defaults.go | ||
go.mod | ||
go.sum | ||
lexer.go | ||
LICENSE | ||
README.md | ||
scpt.go | ||
test.scpt |
scpt
scpt is an applescript-inspired scripting language written for fun and to see if I could.
Usage
scpt is to be used as a library imported into Go. A basic interpreter with no extra functionality would look like this:
package main
import (
"gitea.arsenm.dev/Arsen6331/scpt"
"log"
"os"
"path/filepath"
)
func main() {
filename := os.Args[1]
file, err := os.Open(filepath.Clean(filename))
if err != nil {
log.Fatalln(err)
}
ast, err := scpt.Parse(file)
if err != nil {
log.Fatalln(err)
}
err = ast.Execute()
if err != nil {
log.Fatalln(err)
}
}
Basic Syntax
The basic syntax of scpt can be learned from the test.scpt file.
Default Functions
scpt comes with the following default functions:
str
: Convert value to stringnum
: Parse string to number (float64
)bool
: Parse string to booleanbreak
: Break out of loop (Errors if not in loop)append
: Return an array with given items appendedexit
: Exit with given exit codereturn
: Return value in function (Errors if not within function)print
: Print usingfmt.Println()
Adding functionality:
Adding functionality is simple and requires a call to scpt.AddFuncs()
or scpt.AddVars()
. Here are some examples:
scpt.AddFuncs(scpt.FuncMap{
"my-function": myFunction
})
Where myFunction
is:
func myFunction(args map[string]interface{}) (interface{}, error) {
fmt.Println(args)
return nil, nil
}
After the call to scpt.AddFuncs()
, my-function
can be used to run the function from within an scpt script. Variables work similarly.