aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2020-08-20 08:50:44 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2020-08-20 08:50:44 -0400
commit25ef0c7bb9c448ceefe7a3d8dbc6a7c22dd7be5d (patch)
tree40f04b0e69ba6cc1a28557c20dc78d71c4515ec6
parent5064898db4f909d06f31ec13e100434500623f49 (diff)
Handle escaped quotes in strings
-rwxr-xr-xc.bqn7
-rw-r--r--src/c.bqn9
-rw-r--r--test/bcases.bqn1
3 files changed, 10 insertions, 7 deletions
diff --git a/c.bqn b/c.bqn
index 379a8ab6..a038c3cf 100755
--- a/c.bqn
+++ b/c.bqn
@@ -27,14 +27,15 @@ special←<˘6‿2⥊"𝕤𝕩𝕨𝕣𝕗𝕘"
spd←⥊⍉3‿0↓⌜↑⟜special⌜3‿5‿6
Tokenize←{
- r←𝕩='#'⋄s←/(≠↑2⊸↓)⊸∧𝕩='''⋄d←/𝕩='"'
+ r←𝕩='#'⋄s←/(≠↑2⊸↓)⊸∧𝕩='''⋄d←/dm←𝕩='"'
g←⍋q←∾⟨ s⋄¯1↓d⋄/r⟩ ⋄q↩g⊏q
e← g⊏∾⟨2+s⋄ 1↓d⋄(⊢-¯1↓0∾⊢)∘⊏⟜(0∾+`r)⊸//(𝕩=nl)∾1⟩
Se←{(⊏˜𝕨)Se 1¨⌾((𝕩/𝕨)⊸⊏)𝕩}⍟{0=⊑⌽𝕩}
st←¯1↓Se⟜(1↑˜≠)∾⟜≠q⍋e⋄b←st/q∾˘e
- ToI←¯1↓·/⁼(≠𝕩)∾˜⥊⋄f←¬≠`ToI b
+ ToI←¯1↓·/⁼(≠𝕩)∾˜⥊
+ f←¬≠`bm←ToI b⋄f∧↩¬qe←f∧bm∧(1↓0∾˜⊢)⊸∧dm
cb←(¬(st/q)⊏r)/b
- lu←⍷lit←𝕩⊔˜1-˜(+`ToI⊑˘cb)×≠`ToI cb
+ lu←⍷lit←𝕩⊔˜1-˜(+`qe-˜ToI⊑˘cb)×≠`ToI cb
cl←f/ToI⊑∘⌽˘cb
c←charSet⊐f/𝕩
diff --git a/src/c.bqn b/src/c.bqn
index f156c251..72a58ac0 100644
--- a/src/c.bqn
+++ b/src/c.bqn
@@ -37,14 +37,15 @@ charRole←((vi-1⊑bI)↑/0∾≠¨3↑charGroups)∾(5/⌽↕2)∾0
spc←⥊3‿5‿6-⌜3‿0
Tokenize←{
- r←𝕩='#'⋄s←/(≠↑2⊸↓)⊸∧𝕩='''⋄d←/𝕩='"'
+ r←𝕩='#'⋄s←/(≠↑2⊸↓)⊸∧𝕩='''⋄d←/dm←𝕩='"'
g←⍋q←∾⟨ s⋄¯1↓d⋄/r⟩ ⋄q↩g⊏q
e← g⊏∾⟨2+s⋄ 1↓d⋄(⊢-¯1↓0∾⊢)∘⊏⟜(0∾+`r)⊸//(𝕩=nl)∾1⟩
Se←{(⊏˜𝕨)Se 1¨⌾((𝕩/𝕨)⊸⊏)𝕩}⍟{0=⊑⌽𝕩}
st←¯1↓Se⟜(1↑˜≠)∾⟜≠q⍋e⋄b←st/q∾˘e
- ToI←¯1↓·/⁼(≠𝕩)∾˜⥊⋄f←¬≠`ToI b
+ ToI←¯1↓·/⁼(≠𝕩)∾˜⥊
+ f←¬≠`bm←ToI b⋄f∧↩¬qe←f∧bm∧(1↓0∾˜⊢)⊸∧dm
cb←(¬(st/q)⊏r)/b
- lu←⍷lit←𝕩⊔˜1-˜(+`ToI⊑˘cb)×≠`ToI cb
+ lu←⍷lit←𝕩⊔˜1-˜(+`qe-˜ToI⊑˘cb)×≠`ToI cb
cl←f/ToI⊑∘⌽˘cb
c←CharCode⌾((¬cl)⊸/) f/𝕩
@@ -83,7 +84,7 @@ LEBv ← {
}
ErrMismatchedBrackets←{
- Lcs ← ¯1 ⊑ 0˘∘⊢ (⊢⌈⌈`∘+⟜(0∾˜1↓⊢))˝ =⌜
+ Lcs ← ¯1 ⊑ 0˘∘⊢ {𝕩⌈⌈`𝕨+0∾˜1↓𝕩}˝ =⌜
_mis ← {"Missing "∾𝕗∾" "∾charSet⊏˜𝕘+⊢/˜≠∘⊣=⊒}
Msg ← >○≠◶⟨"opening"_mis_ 0, "closing"_mis_ 1˜⟩
0 !˜ 𝕨 (Lcs<⌊○≠)◶⟨Msg,"Malformed bracket nesting"⟩ 𝕩
diff --git a/test/bcases.bqn b/test/bcases.bqn
index 6a9d91fe..9fd238dc 100644
--- a/test/bcases.bqn
+++ b/test/bcases.bqn
@@ -41,3 +41,4 @@
5 % x←2⋄x-˜↩7⋄x
2 % a‿b←2‿0⋄a‿b+↩2⋄a÷b
-7 % x‿y←3‿4⋄x+⍟2˜↩2⋄Y↩-⋄Y x
+9 % ≠"a""""b''""c'"