39 lines
989 B
Go
Raw Normal View History

package ast
import (
2024-08-07 17:39:10 +00:00
"git.akyoto.dev/cli/q/src/expression"
"git.akyoto.dev/cli/q/src/token"
)
// Parse generates an AST from a list of tokens.
2024-07-30 10:48:48 +00:00
func Parse(tokens []token.Token, source []byte) (AST, error) {
2024-07-30 14:36:33 +00:00
nodes := make(AST, 0, len(tokens)/64)
err := EachInstruction(tokens, func(instruction token.List) error {
2024-07-30 14:36:33 +00:00
node, err := parseNode(instruction, source, nodes)
if err == nil && node != nil {
2024-07-30 14:36:33 +00:00
nodes = append(nodes, node)
}
return err
})
2024-07-30 14:36:33 +00:00
return nodes, err
}
// IsAssignment returns true if the expression is an assignment.
func IsAssignment(expr *expression.Expression) bool {
2024-07-21 12:35:06 +00:00
return expr.Token.IsAssignment()
}
// IsFunctionCall returns true if the expression is a function call.
func IsFunctionCall(expr *expression.Expression) bool {
2024-07-21 12:35:06 +00:00
return expr.Token.Kind == token.Call
}
// IsVariableDefinition returns true if the expression is a variable definition.
func IsVariableDefinition(expr *expression.Expression) bool {
2024-07-21 12:35:06 +00:00
return expr.Token.Kind == token.Define
}