Step 18 (part 3): Expand parser — expressions, commands, features
Tokenizer: * and % now emit as operators (were silently swallowed) Added keywords: install, measure, behavior, called 5 new arithmetic operator tests Parser — expression layer: Arithmetic (+, -, *, /, %) via parse-arith Unary not, no, unary minus the X of Y possessive (parse-the-expr) as Type conversion, X in Y membership, array literals [...] fetch URL parsing fixed — no longer consumes "as" meant for fetch Parser — 8 new commands: return, throw, append...to, tell...end, for...in...end, make a Type, install Behavior, measure Parser — 2 new features: def name(params)...end, behavior Name(params)...end Parser — enhanced: wait for event [from target], on every event modifier 33 new parser tests (16 suites), 5 tokenizer tests. 3043/3043 full build, zero regressions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -185,6 +185,43 @@
|
||||
(assert= "number" (get (hs-tok tokens 1) "type"))
|
||||
(assert= "bracket-close" (get (hs-tok tokens 2) "type")))))
|
||||
|
||||
(defsuite
|
||||
"hs-tokenize-arithmetic-ops"
|
||||
(deftest
|
||||
"multiply operator"
|
||||
(let
|
||||
((toks (hs-tokenize "4 * 5")))
|
||||
(assert= "number" (get (nth toks 0) "type"))
|
||||
(assert= "op" (get (nth toks 1) "type"))
|
||||
(assert= "*" (get (nth toks 1) "value"))
|
||||
(assert= "number" (get (nth toks 2) "type"))))
|
||||
(deftest
|
||||
"modulo operator"
|
||||
(let
|
||||
((toks (hs-tokenize "10 % 3")))
|
||||
(assert= "op" (get (nth toks 1) "type"))
|
||||
(assert= "%" (get (nth toks 1) "value"))))
|
||||
(deftest
|
||||
"star as style not operator"
|
||||
(let
|
||||
((toks (hs-tokenize "*color")))
|
||||
(assert= "style" (get (nth toks 0) "type"))
|
||||
(assert= "color" (get (nth toks 0) "value"))))
|
||||
(deftest
|
||||
"division operator"
|
||||
(let
|
||||
((toks (hs-tokenize "10 / 2")))
|
||||
(assert= "op" (get (nth toks 1) "type"))
|
||||
(assert= "/" (get (nth toks 1) "value"))))
|
||||
(deftest
|
||||
"mixed arithmetic"
|
||||
(let
|
||||
((toks (hs-tokenize "1 + 2 * 3")))
|
||||
(assert= "op" (get (nth toks 1) "type"))
|
||||
(assert= "+" (get (nth toks 1) "value"))
|
||||
(assert= "op" (get (nth toks 3) "type"))
|
||||
(assert= "*" (get (nth toks 3) "value")))))
|
||||
|
||||
(defsuite
|
||||
"hs-tokenize-comments"
|
||||
(deftest
|
||||
|
||||
Reference in New Issue
Block a user