Simplified file structure
This commit is contained in:
38
src/ast/Parse.go
Normal file
38
src/ast/Parse.go
Normal file
@ -0,0 +1,38 @@
|
||||
package ast
|
||||
|
||||
import (
|
||||
"git.akyoto.dev/cli/q/src/expression"
|
||||
"git.akyoto.dev/cli/q/src/token"
|
||||
)
|
||||
|
||||
// Parse generates an AST from a list of tokens.
|
||||
func Parse(tokens []token.Token, source []byte) (AST, error) {
|
||||
nodes := make(AST, 0, len(tokens)/64)
|
||||
|
||||
err := EachInstruction(tokens, func(instruction token.List) error {
|
||||
node, err := parseNode(instruction, source, nodes)
|
||||
|
||||
if err == nil && node != nil {
|
||||
nodes = append(nodes, node)
|
||||
}
|
||||
|
||||
return err
|
||||
})
|
||||
|
||||
return nodes, err
|
||||
}
|
||||
|
||||
// IsAssignment returns true if the expression is an assignment.
|
||||
func IsAssignment(expr *expression.Expression) bool {
|
||||
return expr.Token.IsAssignment()
|
||||
}
|
||||
|
||||
// IsFunctionCall returns true if the expression is a function call.
|
||||
func IsFunctionCall(expr *expression.Expression) bool {
|
||||
return expr.Token.Kind == token.Call
|
||||
}
|
||||
|
||||
// IsVariableDefinition returns true if the expression is a variable definition.
|
||||
func IsVariableDefinition(expr *expression.Expression) bool {
|
||||
return expr.Token.Kind == token.Define
|
||||
}
|
Reference in New Issue
Block a user