You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
1.0 KiB
Go

10 years ago
package main
import (
"flag"
"fmt"
"io"
"os"
)
func input() io.ReadCloser {
if flag.Arg(1) == "" {
return os.Stdin
} else {
f, err := os.Open(flag.Arg(1))
if err != nil {
fmt.Fprintf(os.Stderr, "error: %s\n", err)
os.Exit(1)
}
return f
}
}
func check() {
r := input()
defer r.Close()
10 years ago
_, err := parse(r)
if err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
}
}
func lexx() {
r := input()
defer r.Close()
c := lex(r)
for t := range c {
fmt.Println(t)
}
}
func parsse() {
r := input()
defer r.Close()
n, err := parse(r)
if err != nil {
fmt.Fprintf(os.Stderr, "error: %s", err)
os.Exit(1)
}
if err := n.pretty(os.Stdout, ""); err != nil {
fmt.Fprintf(os.Stderr, "error: %s\n", err)
os.Exit(1)
}
}
10 years ago
func main() {
flag.Parse()
switch flag.Arg(0) {
case "check":
check()
case "lex":
lexx()
case "parse":
parsse()
case "":
fmt.Fprintf(os.Stderr, "specify an action (check)\n")
os.Exit(1)
default:
fmt.Fprintf(os.Stderr, "no such action: %s\n", flag.Arg(0))
os.Exit(1)
10 years ago
}
}