From f2c141572c5728a067d829b91c6722c07c2a49dc Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Tue, 10 Aug 2021 14:43:11 -0400 Subject: Header parsing: validate and find arguments/operands/main --- src/c.bqn | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/c.bqn b/src/c.bqn index 307f1a3d..e5381371 100644 --- a/src/c.bqn +++ b/src/c.bqn @@ -158,23 +158,36 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn bp←⟨/b,c⟩∾¨0(<≍○()g⊏p # Bracket pairs g⊏˜↩gs←⍋gr⊏sl⋄gr↩g⊏rev⋄gi←⍋g # Send strand prefixes *‿ to the end - # Block properties + # Headers hh←𝕩=⊑bH⋄cs←𝕩=1+⊑bH # Case header : and separator ; "Punctuation : and ; not allowed outside blocks"_err_(↕∘≠) (∨`b)¯1↓ch cc←(⍋⍋«co)⊏c∾/cs - "Non-label headers unsupported for now!"_err_(↕∘≠) hh>»(𝕩 M bI+0‿nv)∧hf - hr←0∾(hf/rev)⊏r⋄hf∧↩«hh⋄hu←(𝕩 M bI)↩hc⋄hr/˜↩hm⋄hx←(1»hc)/ha # Header-derived role hr and immediacy ¬hx + hl/˜↩hm⋄hm↩hm⌾(hf⊸/)hf + "Header left argument without right"_err_(/HF) ha>hc+`⊸⊏hx∾0 + hx∨↩1=hr + hid←vi‿nv M˜ ht←hm/𝕩 + "Header operation must be name or valid self-reference (𝕊 or 𝕣)"_err_(/HM) hidfx "Block bodies must be of the same kind"_err_(/CB) 1↓cf<»⊸≠ft @@ -204,7 +217,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn tr←1≤er←ir⊏˜IT»ps # er: expression role; tr: train or modifier expression no←0⌈-ir⋄ne←0⌈-er⋄nei↩g⋄nx⊏˜↩gr # Nothing value; expression "Nothing (·) cannot be assigned"_nerr ne×a - oa←⌽/op←(er<2)∧r≥2⋄ro←op∨«op∧m2←r=3 # op: active modifiers; ro: mod or right operand + oa←⌽/hfaa + "Can't use result of function/modifier assignment without parentheses"_err_(G) hf<(0aa af>↩alm←ai⊏aa⋄al←alm/ai # aliases al # Lexical resolution (independent of parsing part 2 below) @@ -261,7 +274,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn # Parsing part 2 ta←tr∧2(>∨|)ps(⊢-T)+`¬ro # Train argument (first-level) - fa←/(fe←ta∨ro∨«⊸∨psfe∨ff dy←2≠ny←fa⊏2«no⌈2׬(tr∧r≥0)∨ro