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  }