表达式的定义

  1. type Expr interface {
  2. Node
  3. // contains filtered or unexported methods
  4. }
  5. type BadExpr struct{ ... }
  6. type BinaryExpr struct{ ... }
  7. type CallExpr struct{ ... }
  8. type Expr interface{ ... }
  9. type ExprStmt struct{ ... }
  10. type IndexExpr struct{ ... }
  11. type KeyValueExpr struct{ ... }
  12. type ParenExpr struct{ ... }
  13. type SelectorExpr struct{ ... }
  14. type SliceExpr struct{ ... }
  15. type StarExpr struct{ ... }
  16. type TypeAssertExpr struct{ ... }
  17. type UnaryExpr struct{ ... }

我们以ast.BinaryExpr表达的二元算术表达式开始,因为加减乘除四则运算是我们最熟悉的表达式结构:

  1. func main() {
  2. expr, _ := parser.ParseExpr(`1+2*3`)
  3. ast.Print(nil, expr)
  4. }
  5. -------------------------------output-------------------------------
  6. 0 *ast.BinaryExpr {
  7. 1 . X: *ast.BasicLit {
  8. 2 . . ValuePos: 1
  9. 3 . . Kind: INT
  10. 4 . . Value: "1"
  11. 5 . }
  12. 6 . OpPos: 2
  13. 7 . Op: +
  14. 8 . Y: *ast.BinaryExpr {
  15. 9 . . X: *ast.BasicLit {
  16. 10 . . . ValuePos: 3
  17. 11 . . . Kind: INT
  18. 12 . . . Value: "2"
  19. 13 . . }
  20. 14 . . OpPos: 4
  21. 15 . . Op: *
  22. 16 . . Y: *ast.BasicLit {
  23. 17 . . . ValuePos: 5
  24. 18 . . . Kind: INT
  25. 19 . . . Value: "3"
  26. 20 . . }
  27. 21 . }
  28. 22 }

image.png