57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package parser
|
|
|
|
import "github.com/fatih/hcl/scanner"
|
|
|
|
type NodeType int
|
|
|
|
const (
|
|
Unknown NodeType = 0
|
|
Number
|
|
Float
|
|
Bool
|
|
String
|
|
List
|
|
Object
|
|
)
|
|
|
|
// Node is an element in the parse tree.
|
|
type Node interface {
|
|
String() string
|
|
Type() NodeType
|
|
Start() scanner.Pos
|
|
End() scanner.Pos
|
|
}
|
|
|
|
// IdentStatement represents an identifier.
|
|
type IdentStatement struct {
|
|
Token scanner.Token
|
|
Pos scanner.Pos // position of the literal
|
|
Value string
|
|
}
|
|
|
|
type BlockStatement struct {
|
|
Lbrace scanner.Pos // position of "{"
|
|
Rbrace scanner.Pos // position of "}"
|
|
List []Node // the nodes in lexical order
|
|
}
|
|
|
|
// AssignStatement represents an assignment
|
|
type AssignStatement struct {
|
|
Lhs Node // left hand side of the assignment
|
|
Rhs Node // right hand side of the assignment
|
|
Assign scanner.Pos // position of "="
|
|
}
|
|
|
|
// ListStatement represents a list
|
|
type ListStatement struct {
|
|
Lbrack scanner.Pos // position of "["
|
|
Rbrack scanner.Pos // position of "]"
|
|
List []Node // the elements in lexical order
|
|
}
|
|
|
|
// ObjectStatment represents an object
|
|
type ObjectStatement struct {
|
|
Idents []Node // the idents in elements in lexical order
|
|
BlockStatement
|
|
}
|