diff options
| author | Marshall Lochbaum <mwlochbaum@gmail.com> | 2020-08-20 08:50:44 -0400 |
|---|---|---|
| committer | Marshall Lochbaum <mwlochbaum@gmail.com> | 2020-08-20 08:50:44 -0400 |
| commit | 25ef0c7bb9c448ceefe7a3d8dbc6a7c22dd7be5d (patch) | |
| tree | 40f04b0e69ba6cc1a28557c20dc78d71c4515ec6 | |
| parent | 5064898db4f909d06f31ec13e100434500623f49 (diff) | |
Handle escaped quotes in strings
| -rwxr-xr-x | c.bqn | 7 | ||||
| -rw-r--r-- | src/c.bqn | 9 | ||||
| -rw-r--r-- | test/bcases.bqn | 1 |
3 files changed, 10 insertions, 7 deletions
@@ -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/𝕩 @@ -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'" |
