# 4g: parsing (outside caller) ### `++rash` Parse or crash Parse a cord with a given `++rule` and crash if the `++cord` isn't entirely parsed. Accepts ------- `naf` is an atom. `sab` is a `++rule`. Produces -------- The value of the parse result, or crash. Source ------ ++ rash |*({naf/@ sab/rule} (scan (trip naf) sab)) :: Examples -------- > (rash 'I was the world in which I walked, and what I saw' (star (shim 0 200))) "I was the world in which I walked, and what I saw" > (rash 'abc' (just 'a')) ! {1 2} ! 'syntax-error' ! exit > (rash 'abc' (jest 'abc')) 'abc' `> (rash 'abc' (jest 'ab')) ! {1 3} ! 'syntax-error' ! exit *** ### `++rush` Parse or null Parse a given with a given rule and produce null if the cord isn't entirely parsed. Accepts ------- `naf` is an atom. `sab` is a rule. Produces -------- The value of the parse result, or null. Source ------ ++ rush |*({naf/@ sab/rule} (rust (trip naf) sab)) Examples -------- > (rush 'I was the world in which I walked, and what I saw' (star (shim 0 200))) [~ "I was the world in which I walked, and what I saw"] > (rush 'abc' (just 'a')) ~ > (rush 'abc' (jest 'abc')) [~ 'abc'] > (rush 'abc' (jest 'ac')) ~ > (rush 'abc' (jest 'ab')) ~ *** ### `++rust` Parse tape or null Parse a `++tape` with a given `++rule` and produce null if the `++tape` isn't entirely parsed. Accepts ------- `los` is a `++tape`. `sab` is a `++rule`. Produces -------- A `(unit ,@t)` Source ------ ++ rust |* {los/tape sab/rule} =+ vex=((full sab) [[1 1] los]) ?~(q.vex ~ [~ u=p.u.q.vex]) Examples -------- > (rust "I was the world in which I walked, and what I saw" (star (shim 0 200))) [~ "I was the world in which I walked, and what I saw"] > (rust "Or heard or felt came not but from myself;" (star (shim 0 200))) [~ "Or heard or felt came not but from myself;"] > (rust "And there I found myself more truly and more strange." (jest 'And there I')) ~ *** ### `++scan` Parse tape or crash Parse a `++tape` with a given `++rule` and crash if the `++tape` isn't entirely parsed. Accepts ------- `los` is a tape. `sab` is a rule. Produces -------- Either a `++tape` or a crash. Source ------ ++ scan |* {los/tape sab/rule} =+ vex=((full sab) [[1 1] los]) ?~ q.vex ~_ (show [%m '{%d %d}'] p.p.vex q.p.vex ~) ~|('syntax-error' !!) p.u.q.vex Examples -------- > (scan "I was the world in which I walked, and what I saw" (star (shim 0 200))) "I was the world in which I walked, and what I saw" > (scan "Or heard or felt came not but from myself;" (star (shim 0 200))) "Or heard or felt came not but from myself;" > (scan "And there I found myself more truly and more strange." (jest 'And there I')) ! {1 12} ! 'syntax-error' ! exit ***