// // Copyright (c) 2018, Přemysl Eric Janouch // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted. // // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY // SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION // OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN // CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // // Program interpreter is a basic ell interpreter. package main import ( "fmt" "io/ioutil" "os" "janouch.name/ell/ell" ) func main() { var script []byte var err error if len(os.Args) < 2 { script, err = ioutil.ReadAll(os.Stdin) } else { script, err = ioutil.ReadFile(os.Args[1]) } if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } L := ell.New() if !ell.StdInitialize(L) { fmt.Printf("runtime library initialization failed: %s\n", L.Error) } program, err := ell.NewParser(script).Run() if err != nil { fmt.Printf("%s: %s\n", "parse error", err) os.Exit(1) } var args []ell.V for i := 2; i < len(os.Args); i++ { args = append(args, *ell.NewString(os.Args[i])) } if _, ok := L.EvalBlock(program, args); !ok { fmt.Printf("%s: %s\n", "runtime error", L.Error) } }