From 3cccac26dc804704446cd88676dc583f997252fd Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Wed, 17 Aug 2022 10:20:36 -0400 Subject: Index-based is better than mask-based tracing (e.g. for strings and comments) --- src/c.bqn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/c.bqn') diff --git a/src/c.bqn b/src/c.bqn index eaf221b3..fb4f88b1 100644 --- a/src/c.bqn +++ b/src/c.bqn @@ -46,8 +46,8 @@ Tokenize←{System‿vars←𝕨 c←𝕩='#'⋄s←/0‿0⊸«⊸∧sm←𝕩='''⋄d←/dm←𝕩='"' g←⍋q←∾⟨ s⋄¯1↓d⋄/c⟩ ⋄q↩g⊏q # Open indices e← g⊏∾⟨2+s⋄ 1↓d⋄-⟜»∘⊏⟜(0∾+`c)⊸//(𝕩∊lf)∾1⟩ # Matching close indices - Se←{(⊏˜𝕨)Se 1¨⌾((𝕩/𝕨)⊸⊏)𝕩}⍟(0=¯1⊑⊢) # Mark reachable openings - St←(≠𝕩)↑·/⁼((≠↑∾⟜≠Se 1∾0¨)q⍋e)⊸/ # All indices → reached mask + Se←≠(>/⊢)∾⟜≠{(⊏˜𝕨)𝕊⍟(≠○(¯1⊸⊑))𝕩∾𝕩⊏𝕨}⟨0⟩˙ # Find reachable openings + St←(≠𝕩)↑·/⁼(Se q⍋e)⊸⊏ # All indices → reached mask a←St q⋄b←St e⋄f←1≠`ab←a∨b # Open/close masks; filter {!⟨⊑/𝕩,"Unclosed quote"⟩}⍟(∨´)(sm∨dm)∧b