package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/brettlangdon/gython/ast"
|
|
"github.com/brettlangdon/gython/grammar"
|
|
"github.com/brettlangdon/gython/scanner"
|
|
"github.com/brettlangdon/gython/token"
|
|
)
|
|
|
|
func tokenize() {
|
|
tokenizer := scanner.NewScanner(os.Stdin)
|
|
for {
|
|
tok := tokenizer.NextToken()
|
|
tokenRange := fmt.Sprintf("%d,%d-%d,%d:", tok.LineStart, tok.ColumnStart, tok.LineEnd, tok.ColumnEnd)
|
|
literalRep := fmt.Sprintf("%#v", tok.Literal)
|
|
fmt.Printf("%-20s%-15s%-15s\n", tokenRange, tok.String(), literalRep)
|
|
if tok.ID == token.ENDMARKER || tok.ID == token.ERRORTOKEN {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
func parseGrammar() *grammar.FileInput {
|
|
tokenizer := scanner.NewScanner(os.Stdin)
|
|
gp := grammar.NewGrammarParser(tokenizer)
|
|
return gp.Parse()
|
|
}
|
|
|
|
func parseAST() {
|
|
start := parseGrammar()
|
|
mod, err := ast.ASTFromGrammar(start)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
fmt.Println(mod)
|
|
}
|
|
|
|
func main() {
|
|
// start := parseGrammar()
|
|
// fmt.Println(start.Repr())
|
|
parseAST()
|
|
}
|