terraform/config/lang/ast/ast.go

44 lines
959 B
Go
Raw Normal View History

2015-01-11 21:38:45 +01:00
package ast
2015-01-12 09:28:47 +01:00
import (
"fmt"
)
2015-01-11 21:38:45 +01:00
// Node is the interface that all AST nodes must implement.
2015-01-12 00:26:54 +01:00
type Node interface {
// Accept is called to dispatch to the visitors.
Accept(Visitor)
2015-01-12 09:28:47 +01:00
// Pos returns the position of this node in some source.
Pos() Pos
}
// Pos is the starting position of an AST node
type Pos struct {
Column, Line int // Column/Line number, starting at 1
}
2015-01-12 18:57:16 +01:00
func (p Pos) String() string {
2015-01-12 09:28:47 +01:00
return fmt.Sprintf("%d:%d", p.Line, p.Column)
2015-01-12 00:26:54 +01:00
}
// Visitors are just implementations of this function.
//
// Note that this isn't a true implementation of the visitor pattern, which
// generally requires proper type dispatch on the function. However,
// implementing this basic visitor pattern style is still very useful even
// if you have to type switch.
type Visitor func(Node)
2015-01-11 21:38:45 +01:00
//go:generate stringer -type=Type
2015-01-11 21:38:45 +01:00
// Type is the type of a literal.
type Type uint
const (
2015-01-12 00:26:54 +01:00
TypeInvalid Type = 0
2015-01-13 17:50:28 +01:00
TypeString Type = 1 << iota
TypeInt
2015-01-12 17:53:27 +01:00
TypeFloat
2015-01-11 21:38:45 +01:00
)