diff options
| author | Marshall Lochbaum <mwlochbaum@gmail.com> | 2020-08-18 22:55:40 -0400 |
|---|---|---|
| committer | Marshall Lochbaum <mwlochbaum@gmail.com> | 2020-08-18 23:00:03 -0400 |
| commit | 8529cfa70e0975c67425bb90c872984ecc31c0d2 (patch) | |
| tree | 11bf397c039aacc64f4e264046fa77c09041a855 /src/c.bqn | |
| parent | c3dee69d6e936fd8b6d1cf2b3676d612913a61fc (diff) | |
Add check for well-formed bracket nesting (somewhat dodgy diagnostic)
Diffstat (limited to 'src/c.bqn')
| -rw-r--r-- | src/c.bqn | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -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 |
