wrote dsl for ast boiler plate generation
This commit is contained in:
parent
b244f7e3b2
commit
e0dd8ff9d5
16 changed files with 915 additions and 60 deletions
20
run.go
20
run.go
|
|
@ -2,7 +2,9 @@ package loxgo
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"git.red-panda.pet/pandaware/lox-go/lexer"
|
||||
"git.red-panda.pet/pandaware/lox-go/parser"
|
||||
|
|
@ -25,19 +27,35 @@ func RunFile(filename string) error {
|
|||
|
||||
func Run(source string) error {
|
||||
s := lexer.New(source)
|
||||
|
||||
lexStart := time.Now()
|
||||
tokens, ok := s.ScanTokens()
|
||||
lexDuration := time.Since(lexStart)
|
||||
|
||||
if !ok {
|
||||
return errors.New("lexer error")
|
||||
}
|
||||
|
||||
p := parser.New(tokens)
|
||||
|
||||
parseStart := time.Now()
|
||||
expr, err := p.Parse()
|
||||
parseDuration := time.Since(parseStart)
|
||||
|
||||
if err != nil {
|
||||
return errors.New("parser error")
|
||||
}
|
||||
|
||||
interpreter := runtime.NewInterpreter()
|
||||
reporter.Debug(0, "interpreter", "stdin", interpreter.Evaluate(expr).Debug())
|
||||
|
||||
evalStart := time.Now()
|
||||
reporter.Info(1, "interpreter", "repl", interpreter.Evaluate(expr).Debug())
|
||||
evalDuration := time.Since(evalStart)
|
||||
|
||||
fmt.Println("")
|
||||
reporter.Debug(-1, "lexer", "repl", fmt.Sprintf("took %s", lexDuration))
|
||||
reporter.Debug(-1, "parser", "repl", fmt.Sprintf("took %s", parseDuration))
|
||||
reporter.Debug(-1, "interp", "repl", fmt.Sprintf("took %s", evalDuration))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue