Something went wrong. Try again.
🌱 A minimal programming language and compiler. git.urbach.dev/cli/q
high-performance programming-language compiler
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839package ast
import ( "git.urbach.dev/cli/q/src/errors" "git.urbach.dev/cli/q/src/expression" "git.urbach.dev/cli/q/src/fs" "git.urbach.dev/cli/q/src/token")
// parseInstruction generates an AST node from an instruction.func parseInstruction(tokens token.List, file *fs.File, nodes AST) (Node, error) { switch { case tokens[0].Kind.IsKeyword(): return parseKeyword(tokens, file, nodes) case tokens[0].Kind == token.Comment: return nil, nil }
expr := expression.Parse(tokens)
switch { case expr.Token.Kind == token.Call: return &Call{Expression: expr}, nil case expr.Token.Kind == token.Define: if len(expr.Children) < 2 { return nil, errors.NewAt(MissingOperand, file, expr.Token.End()) }
return &Define{Expression: expr}, nil case expr.Token.Kind.IsAssignment(): if len(expr.Children) < 2 { return nil, errors.NewAt(MissingOperand, file, expr.Token.End()) }
return &Assign{Expression: expr}, nil default: return nil, errors.New(InvalidInstruction, file, tokens) }}