visitor.go 816 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package xsql
  2. type ExpressionVisitor interface {
  3. Visit(Node) Visitor
  4. VisitBinaryExpr(*BinaryExpr)
  5. VisitFieldRef(*FieldRef)
  6. VisitIntegerLiteral(*IntegerLiteral)
  7. }
  8. type ExpressionVisitorAdaptor struct {
  9. }
  10. func (eva *ExpressionVisitorAdaptor) DoVisit(v ExpressionVisitor, expr Node) {
  11. switch n := expr.(type) {
  12. case *BinaryExpr:
  13. v.VisitBinaryExpr(n)
  14. case *FieldRef:
  15. v.VisitFieldRef(n)
  16. case *IntegerLiteral:
  17. v.VisitIntegerLiteral(n)
  18. }
  19. }
  20. func (eva *ExpressionVisitorAdaptor) Visit(expr Node) Visitor {
  21. return nil
  22. }
  23. func (eva *ExpressionVisitorAdaptor) VisitBinaryExpr(expr *BinaryExpr) {
  24. Walk(eva, expr.LHS)
  25. Walk(eva, expr.RHS)
  26. }
  27. func (eva *ExpressionVisitorAdaptor) VisitFieldRef(expr *FieldRef) {
  28. Walk(eva, expr)
  29. }
  30. func (eva *ExpressionVisitorAdaptor) visitIntegerLiteral(expr *FieldRef) {
  31. }