aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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