From ec4a344a90bc82b88514b5c34bbd0119dfc8e6c4 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Fri, 17 Jun 2022 14:02:36 -0400 Subject: Stricter syntax checking for aliases --- src/c.bqn | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/c.bqn b/src/c.bqn index 020421b8..615b0709 100644 --- a/src/c.bqn +++ b/src/c.bqn @@ -231,10 +231,11 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn "Dot must be preceded by a subject"_err_(⍋∘rev) (r=4)>»r=0 r(×⟜¬-⊢)↩dl # Namespace and dot to ¯1 - # Prep for lexical resolution before reordering 𝕩 - xv←𝕩-vi + # Reorder for parsing + xv←𝕩-vi # Save for lexical resolution {i↩(𝕨⊏i)⌾(𝕩⊸⊏)i⋄e↩(𝕩⊏e)⌾(𝕨⊸⊏)e}´bp # Highlight all contents of a pair when error reporting - 𝕩⊏˜↩g⋄hg←g⊏hf⋄r⊏˜↩gr⋄ir⊏˜↩gr⋄l↩(l0←l⊏⍋gs)∾/gr⊏sr>sl + 𝕩⊏˜↩g⋄hg←g⊏hf⋄r⊏˜↩gr⋄ns⊏˜↩gr⋄ir⊏˜↩gr + l↩(l0←l⊏⍋gs)∾/gr⊏sr>sl # Indices of list literals lm←(0¨sll)∾˜(5+⊑bB)-˜l0⊏𝕩 # List merge, adding 2 for [] # Parsing part 1 @@ -257,7 +258,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn at∾↩hj⋄ac←«⊸-(ak∾6¨hj)⌾(at⊸⊏)0¨𝕩 # Header assignment is 6 temporarily aa←×gac←g⊏ac↩»+`(1⊸»⊸∨0=+`)⊸×gi⊏ac # Broadcast ac to the entire target api←/(𝕩=⊑bO)∧ap←aa∧2=no # Assignment placeholder - "Can't use Nothing (·) in lists"_nerr (¬ap)×no×(gr⊏¬ns)∨»lo∨ls + "Can't use Nothing (·) in lists"_nerr (¬ap)×no×ns≤»lo∨ls "Square brackets can't be empty"_err_(G) aa<(𝕩=6+⊑bB)∧1«ps ac-↩3×ah←6=ac # Assignment is header; 6→3 nx⌈↩aa×1=no # Prevent assignment to 𝕨 if it's · @@ -275,7 +276,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn "Can't nest assignments (write aliases with ⇐)"_err_(ai⊏G) ((5≠ai⊏gac)∧ak=2)aa af>↩alm←ai⊏aa⋄al←alm/ai # aliases al - "Aliases can only appear in ⟨⟩ bracketed lists"_err_(al⊏G) ¬al⊏(fo∨𝕩=⊑bB)<○IT lo + "Alias must have a name on the right and appear within ⟨⟩"_err_(al⊏G) ¬(al-1)⊏aid∧ns∧»ls∨𝕩=4+⊑bB ai/˜↩af⋄at/˜↩af∾1¨hj # Lexical resolution (independent of parsing part 2 below) -- cgit v1.2.3