wrote dsl for ast boiler plate generation

This commit is contained in:
basil 2025-06-08 21:18:17 -04:00
parent b244f7e3b2
commit e0dd8ff9d5
Signed by: basil
SSH key fingerprint: SHA256:y04xIFL/yqNaG9ae9Vl95vELtHfApGAIoOGLeVLP/fE
16 changed files with 915 additions and 60 deletions

52
ast/gen/generate.go Normal file
View file

@ -0,0 +1,52 @@
package main
import (
"flag"
"fmt"
"os"
"strings"
)
var fileName string
func init() {
flag.StringVar(&fileName, "f", "", "ast file to generate from")
}
func main() {
flag.Parse()
bs, err := os.ReadFile(fileName)
tokens, errs := lex(string(bs))
if len(errs) > 0 {
for _, err := range errs {
fmt.Printf("%s\n", err.Error())
}
os.Exit(1)
}
ast, err := parse(tokens)
if err != nil {
fmt.Printf("%s\n", err.Error())
os.Exit(1)
}
name, output, err := transpile(ast)
if err != nil {
fmt.Printf("%s\n", err.Error())
os.Exit(1)
}
f, err := os.Create(strings.ToLower(name) + ".go")
if err != nil {
fmt.Printf("%s\n", err.Error())
os.Exit(1)
}
_, err = f.Write(output)
if err != nil {
fmt.Printf("%s\n", err.Error())
os.Exit(1)
}
}