github.com/nevalang/neva@v0.23.1-0.20240507185603-7696a9bb8dda/cmd/neva/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/nevalang/neva/internal/builder" 8 "github.com/nevalang/neva/internal/cli" 9 "github.com/nevalang/neva/internal/compiler" 10 "github.com/nevalang/neva/internal/compiler/analyzer" 11 "github.com/nevalang/neva/internal/compiler/backend/dot" 12 "github.com/nevalang/neva/internal/compiler/backend/golang" 13 "github.com/nevalang/neva/internal/compiler/backend/golang/native" 14 "github.com/nevalang/neva/internal/compiler/backend/golang/wasm" 15 "github.com/nevalang/neva/internal/compiler/backend/json" 16 "github.com/nevalang/neva/internal/compiler/desugarer" 17 "github.com/nevalang/neva/internal/compiler/irgen" 18 "github.com/nevalang/neva/internal/compiler/parser" 19 "github.com/nevalang/neva/internal/compiler/sourcecode/typesystem" 20 "github.com/nevalang/neva/pkg" 21 ) 22 23 func main() { 24 wd, err := os.Getwd() 25 if err != nil { 26 panic(err) 27 } 28 29 terminator := typesystem.Terminator{} 30 checker := typesystem.MustNewSubtypeChecker(terminator) 31 resolver := typesystem.MustNewResolver(typesystem.Validator{}, checker, terminator) 32 33 prsr := parser.New(false) 34 bldr := builder.MustNew(prsr) 35 36 desugarer := desugarer.New() 37 analyzer := analyzer.MustNew(pkg.Version, resolver) 38 irgen := irgen.New() 39 40 golangBackend := golang.NewBackend() 41 42 goCompiler := compiler.New( 43 bldr, 44 prsr, 45 desugarer, 46 analyzer, 47 irgen, 48 golang.NewBackend(), 49 ) 50 51 nativeCompiler := compiler.New( 52 bldr, 53 prsr, 54 desugarer, 55 analyzer, 56 irgen, 57 native.NewBackend( 58 golangBackend, 59 ), 60 ) 61 62 wasmCompiler := compiler.New( 63 bldr, 64 prsr, 65 desugarer, 66 analyzer, 67 irgen, 68 wasm.NewBackend( 69 golangBackend, 70 ), 71 ) 72 73 jsonCompiler := compiler.New( 74 bldr, 75 prsr, 76 desugarer, 77 analyzer, 78 irgen, 79 json.NewBackend(), 80 ) 81 82 dotCompiler := compiler.New( 83 bldr, 84 prsr, 85 desugarer, 86 analyzer, 87 irgen, 88 dot.NewBackend(), 89 ) 90 91 // command-line app that can compile and interpret neva code 92 app := cli.NewApp( 93 wd, 94 bldr, 95 goCompiler, 96 nativeCompiler, 97 wasmCompiler, 98 jsonCompiler, 99 dotCompiler, 100 ) 101 102 // run CLI app 103 if err := app.Run(os.Args); err != nil { 104 fmt.Fprintln(os.Stderr, err) 105 } 106 }