aboutsummaryrefslogtreecommitdiff
path: root/parse.go
diff options
context:
space:
mode:
Diffstat (limited to 'parse.go')
-rw-r--r--parse.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/parse.go b/parse.go
index 4704ed3..a9c7b9d 100644
--- a/parse.go
+++ b/parse.go
@@ -326,6 +326,14 @@ func parseDeclaration(toks *tokens) (declStmt, error) {
return mutable, nil
}
+ assignment, err := parseAssignStmt(toks)
+ if err != nil {
+ return nil, err
+ }
+ if assignment != nil {
+ return assignment, nil
+ }
+
return nil, nil
}
@@ -387,6 +395,35 @@ func parseMutStmt(toks *tokens) (*mutStmt, error) {
return &mutStmt{name: nameTok.value, initial: expr, ln: line}, nil
}
+func parseAssignStmt(toks *tokens) (*assignStmt, error) {
+ ok, err := toks.match(assign)
+ if err != nil {
+ return nil, err
+ }
+ if !ok {
+ toks.unreadToken()
+ return nil, nil
+ }
+
+ line := toks.current().line
+
+ nameTok, ok := toks.consumeToken()
+ if !ok {
+ return nil, unexpectedEOF
+ }
+
+ if err := toks.mustMatch(equals); err != nil {
+ return nil, err
+ }
+
+ expr, err := parseExpression(toks)
+ if err != nil {
+ return nil, err
+ }
+
+ return &assignStmt{name: nameTok.value, value: expr, ln: line}, nil
+}
+
func parseExpression(toks *tokens) (exprExpr, error) {
return parseEquality(toks)
}