aboutsummaryrefslogtreecommitdiff
path: root/src/c.bqn
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2020-08-18 22:55:40 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2020-08-18 23:00:03 -0400
commit8529cfa70e0975c67425bb90c872984ecc31c0d2 (patch)
tree11bf397c039aacc64f4e264046fa77c09041a855 /src/c.bqn
parentc3dee69d6e936fd8b6d1cf2b3676d612913a61fc (diff)
Add check for well-formed bracket nesting (somewhat dodgy diagnostic)
Diffstat (limited to 'src/c.bqn')
-rw-r--r--src/c.bqn11
1 files changed, 9 insertions, 2 deletions
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