From 5300ca5e3b984c15753f7bb96f07f5105d7a48a5 Mon Sep 17 00:00:00 2001 From: Scott Richmond Date: Thu, 4 Aug 2022 16:54:13 -0400 Subject: [PATCH] Move ns & import to parse-script --- src/ludus/parser.clj | 55 ++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/src/ludus/parser.clj b/src/ludus/parser.clj index eab7007..5b019a4 100644 --- a/src/ludus/parser.clj +++ b/src/ludus/parser.clj @@ -440,30 +440,7 @@ (parse-expr parser))] (recur parsed exprs (::ast parsed))))))) -(defn parse-script [origin] - (loop [parser (accept-many #{::token/newline ::token/semicolon} origin) - exprs [] - current_expr nil] - (case (token-type parser) - ::token/eof - (let [es (add-member exprs current_expr)] - (if (empty? es) - (panic parser "Scripts must have at least one expression") - (assoc parser ::ast {::ast/type ::ast/script - :token (current origin) :exprs es}))) - (::token/semicolon ::token/newline) - (recur - (accept-many #{::token/semicolon ::token/newline} parser) - (add-member exprs current_expr) - nil) - - (let [parsed - (if current_expr - (panic parser "Expected end of expression" #{::token/semicolon ::token/newline}) - (parse-expr parser))] - - (recur parsed exprs (::ast parsed)))))) (defn- parse-synthetic [parser] (loop [parser parser @@ -1064,6 +1041,34 @@ :clauses (get-in clauses [::ast :clauses])})) (panic parser "Expected { after receive")))) +(defn parse-script [origin] + (loop [parser (accept-many #{::token/newline ::token/semicolon} origin) + exprs [] + current_expr nil] + (case (token-type parser) + ::token/eof + (let [es (add-member exprs current_expr)] + (if (empty? es) + (panic parser "Scripts must have at least one expression") + (assoc parser ::ast {::ast/type ::ast/script + :token (current origin) :exprs es}))) + ::token/ns (parse-ns parser) + + ::token/import (parse-import parser) + + (::token/semicolon ::token/newline) + (recur + (accept-many #{::token/semicolon ::token/newline} parser) + (add-member exprs current_expr) + nil) + + (let [parsed + (if current_expr + (panic parser "Expected end of expression" #{::token/semicolon ::token/newline}) + (parse-expr parser))] + + (recur parsed exprs (::ast parsed)))))) + (defn- parse-expr ([parser] (parse-expr parser sync-on)) ([parser sync-on] @@ -1120,10 +1125,6 @@ ::token/cond (parse-cond parser) - ::token/ns (parse-ns parser) - - ::token/import (parse-import parser) - ::token/ref (parse-ref parser) ::token/loop (parse-loop parser)