textual.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package textual
  2. import (
  3. "io"
  4. "fmt"
  5. "reflect"
  6. "kumachan/lang/source"
  7. "kumachan/lang/textual/scanner"
  8. "kumachan/lang/textual/syntax"
  9. "kumachan/lang/textual/parser"
  10. "kumachan/lang/textual/transformer"
  11. )
  12. func DebugParser(file io.Reader, name string, root syntax.Id) bool {
  13. fmt.Println("------------------------------------------------------")
  14. fmt.Printf("\033[1m%s\033[0m\n", name)
  15. var code_bytes, e = io.ReadAll(file)
  16. if e != nil { panic(e) }
  17. var code = source.DecodeUtf8ToCode(code_bytes)
  18. var tokens, info, _, s_err = scanner.Scan(code)
  19. if s_err != nil {
  20. fmt.Println(s_err.Error())
  21. return false
  22. }
  23. fmt.Println("------------------------------------------------------")
  24. fmt.Println("Tokens:")
  25. for i, token := range tokens {
  26. fmt.Printf(
  27. "(%v) at [%v, %v] (%v, %v) %v: %v\n",
  28. i,
  29. token.Span.Start,
  30. token.Span.End,
  31. info[token.Span.Start].Row,
  32. info[token.Span.Start].Col,
  33. syntax.Id2Name(token.Id),
  34. source.CodeToString(token.Content),
  35. )
  36. }
  37. var tree, err = parser.Parse(code, root, name)
  38. fmt.Println("------------------------------------------------------")
  39. fmt.Println("CST Nodes:")
  40. parser.PrintFlatTree(tree.Nodes)
  41. fmt.Println("------------------------------------------------------")
  42. fmt.Println("CST:")
  43. parser.PrintTree(tree)
  44. if err != nil {
  45. var msg = err.Message()
  46. fmt.Println(msg.RenderConsole())
  47. return false
  48. } else {
  49. fmt.Println("------------------------------------------------------")
  50. fmt.Println("AST:")
  51. var key = source.FileKey {
  52. Context: "debug",
  53. Path: name,
  54. }
  55. var transformed = transformer.Transform(tree, key)
  56. transformer.PrintNode(reflect.ValueOf(transformed))
  57. return true
  58. }
  59. }