From 8529cfa70e0975c67425bb90c872984ecc31c0d2 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Tue, 18 Aug 2020 22:55:40 -0400 Subject: Add check for well-formed bracket nesting (somewhat dodgy diagnostic) --- src/c.bqn | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/c.bqn b/src/c.bqn index dfcff3f1..06fcd28f 100644 --- a/src/c.bqn +++ b/src/c.bqn @@ -5,7 +5,7 @@ tab←' '⋄nl←' dig ← "0123456789" alph ← "ABCDEFGHIJKLMNOPQRSTUVWXYZ" alow ← "abcdefghijklmnopqrstuvwxyz" -charGroups←⟨ +charSet←∾charGroups←⟨ chF←"+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" # Function "˜˘¨⌜⁼´˝`" # Modifier "∘○⊸⟜⌾⊘◶⎉⚇⍟" # Composition @@ -25,7 +25,7 @@ ErrUnknownChars←{ "Unclosed quote"!¬∨´⟨''','"'⟩∊𝕩 ⟨"Unknown character","s"/˜1<≠𝕩,": ",𝕩⟩∾⊸!0 } -CharCode←(∾charGroups){ +CharCode←charSet{ Chk ← ⊢⊣ErrUnknownChars∘(≠/⊣)⍟≢⟜(⊏⟜𝕗) g←⍋𝕗 ⋄ ⊢ Chk g⊏˜1-˜1⌈(g⊏𝕗)⍋⊢ } @@ -82,8 +82,15 @@ LEBv ← { o⊏l{f←×𝕨⋄(𝕨-1)(b⊸(×⟜f+|)∾𝕊⟜(⌊÷⟜b)○(f⊸/))⍟(∨´f)𝕩}𝕩 } +ErrMismatchedBrackets←{ + Lcs ← ¯1 ⊑ 0˘∘⊢ (⊢⌈⌈`∘+⟜(0∾˜1↓⊢))˝ =⌜ + _mis ← {"Missing "∾𝕗∾" "∾charSet⊏˜𝕘+⊢/˜≠∘⊣=⊒} + Msg ← >○≠◶⟨"opening"_mis_ 0, "closing"_mis_ 1˜⟩ + 0 !˜ 𝕨 (Lcs<⌊○≠)◶⟨Msg,"Malformed bracket nesting"⟩ 𝕩 +} Parse ← {nv‿r←𝕨 g←⍋+`p←𝕩(Mׯ1⋆2|-⟜⊑)bB⋄br←p×𝕩M 2≍˜2+⊑bB + p(=⟜1⊸/ErrMismatchedBrackets⍟≢1-˜=⟜¯1⊸/)○(g⊸⊏)𝕩 sl←1⊸⌽⊸∨𝕩 M bL⋄sr←¯1⊸⌽⌾(g⊸⊏)sl⋄sa←sl∨sr g⊏˜↩⍋g⊏sl⋄r×↩¬sa⋄o←p>0 r+↩(sa<𝕩=1+⊑bB)(⊣∧¬⊸∨=○(⌈`(1+↕∘≠)⊸×)⊢)(¯1⊸⌽⌾(g⊸⊏)3=r)∨1≤r -- cgit v1.2.3