# 4h: parsing (ascii glyphs) ### `++ace` Parse space Parses ASCII character 32, space. Source ------ ++ ace (just ' ') Examples -------- > (scan " " ace) ~~. > `cord`(scan " " ace) ' ' > (ace [[1 1] " "]) [p=[p=1 q=2] q=[~ [p=~~. q=[p=[p=1 q=2] q=""]]]] > (ace [[1 1] " abc "]) [p=[p=1 q=2] q=[~ [p=~~. q=[p=[p=1 q=2] q="abc "]]]] *** ### `++bar` Parse vertical bar Parses ASCII character 124, the vertical bar. Source ------ ++ bar (just '|') Examples -------- > (scan "|" bar) ~~~7c. > `cord`(scan "|" bar) '|' > (bar [[1 1] "|"]) [p=[p=1 q=2] q=[~ [p=~~~7c. q=[p=[p=1 q=2] q=""]]]] > (bar [[1 1] "|="]) [p=[p=1 q=2] q=[~ [p=~~~7c. q=[p=[p=1 q=2] q="="]]]] *** ### `++bas` Parse backslash Parses ASCII character 92, the backslash. Note the extra `\` in the calling of `bas` with [`++just`](/doc/hoon/library/2ec#++just) is to escape the escape character, `\`. Source ------ ++ bas (just '\\') Examples -------- > (scan "\\" bas) ~~~5c. > `cord`(scan "\\" bas) '\' > (bas [[1 1] "\"]) ~ > (bas [[1 1] "\\"]) [p=[p=1 q=2] q=[~ [p=~~~5c. q=[p=[p=1 q=2] q=""]]]] > (bas [[1 1] "\""]) [p=[p=1 q=1] q=~] *** ### `++buc` Parse dollar sign Parses ASCII character 36, the dollar sign. Source ------ ++ buc (just '$') Examples -------- > (scan "$" buc) ~~~24. > `cord`(scan "$" buc) '$' > (buc [[1 1] "$"]) [p=[p=1 q=2] q=[~ [p=~~~24. q=[p=[p=1 q=2] q=""]]]] > (buc [[1 1] "$%"]) [p=[p=1 q=2] q=[~ [p=~~~24. q=[p=[p=1 q=2] q="%"]]]] *** ### `++cab` Parse underscore Parses ASCII character 95, the underscore. Source ------ ++ cab (just '_') Examples -------- > (scan "_" cab) ~~~5f. > `cord`(scan "_" cab) '_' > (cab [[1 1] "_"]) [p=[p=1 q=2] q=[~ [p=~~~5f. q=[p=[p=1 q=2] q=""]]]] > (cab [[1 1] "|_"]) [p=[p=1 q=1] q=~] *** ### `++cen` Parses percent sign Parses ASCII character 37, the percent sign. Source ------ ++ cen (just '%') Examples -------- > (scan "%" cen) ~~~25. > `cord`(scan "%" cen) '%' > (cen [[1 1] "%"]) [p=[p=1 q=2] q=[~ [p=~~~25. q=[p=[p=1 q=2] q=""]]]] > (cen [[1 1] "%^"]) [p=[p=1 q=2] q=[~ [p=~~~25. q=[p=[p=1 q=2] q="^"]]]] *** ### `++col` Parse colon Parses ASCII character 58, the colon Source ------ ++ col (just ':') Examples -------- > (scan ":" col) ~~~3a. > `cord`(scan ":" col) ':' > (col [[1 1] ":"]) [p=[p=1 q=2] q=[~ [p=~~~3a. q=[p=[p=1 q=2] q=""]]]] > (col [[1 1] ":-"]) [p=[p=1 q=2] q=[~ [p=~~~3a. q=[p=[p=1 q=2] q="-"]]]] *** ### `++com` Parse comma Parses ASCII character 44, the comma. Source ------ ++ com (just ',') Examples -------- > (scan "," com) ~~~2c. > `cord`(scan "," com) ',' > (com [[1 1] ","]) [p=[p=1 q=2] q=[~ [p=~~~2c. q=[p=[p=1 q=2] q=""]]]] > (com [[1 1] "not com"]) [p=[p=1 q=1] q=~] *** ### `++doq` Parse double quote Parses ASCII character 34, the double quote. Source ------ ++ doq (just '"') Examples -------- > (scan "\"" doq) ~~~22. > `cord`(scan "\"" doq) '"' > (doq [[1 1] "\""]) [p=[p=1 q=2] q=[~ [p=~~~22. q=[p=[p=1 q=2] q=""]]]] > (doq [[1 1] "not successfully parsed"]) [p=[p=1 q=1] q=~] > (scan "see?" doq) ! {1 1} ! 'syntax-error' ! exit *** ### `++dot` Parse period Parses ASCII character 46, the period. Source ------ ++ dot (just '.') Examples -------- > (scan "." dot) ~~~. > `cord`(scan "." dot) '.' > (dot [[1 1] "."]) [p=[p=1 q=2] q=[~ [p=~~~. q=[p=[p=1 q=2] q=""]]]] > (dot [[1 1] ".^"]) [p=[p=1 q=2] q=[~ [p=~~~. q=[p=[p=1 q=2] q="^"]]]] *** ### `++fas` Parse forward slash Parses ASCII character 47, the forward slash. Source ------ ++ fas (just '/') Examples -------- > (scan "/" fas) ~~~2f. > `cord`(scan "/" fas) '/' > (fas [[1 1] "/"]) [p=[p=1 q=2] q=[~ [p=~~~2f. q=[p=[p=1 q=2] q=""]]]] > (fas [[1 1] "|/"]) [p=[p=1 q=1] q=~] *** ### `++gal` Parse less-than sign Parses ASCII character 60, the less-than sign. Source ------ ++ gal (just '<') Examples -------- > (scan "<" gal) ~~~3c. > `cord`(scan "<" gal) '<' > (gal [[1 1] "<"]) [p=[p=1 q=2] q=[~ [p=~~~3c. q=[p=[p=1 q=2] q=""]]]] > (gal [[1 1] "<+"]) [p=[p=1 q=2] q=[~ [p=~~~3c. q=[p=[p=1 q=2] q="+"]]]] > (gal [[1 1] "+<"]) [p=[p=1 q=1] q=~] *** ### `++gar` Parse greater-than sign Parses ASCII character 62, the greater-than sign. Source ------ ++ gar (just '>') Examples -------- > (scan ">" gar) ~~~3e. > `cord`(scan ">" gar) '>' > (gar [[1 1] ">"]) [p=[p=1 q=2] q=[~ [p=~~~3e. q=[p=[p=1 q=2] q=""]]]] > (gar [[1 1] "=>"]) [p=[p=1 q=1] q=~] *** ### `++hax` Parse number sign Parses ASCII character 35, the number sign. Source ------ ++ hax (just '#') Examples -------- > (scan "#" hax) ~~~23. > `cord`(scan "#" hax) '#' > (hax [[1 1] "#"]) [p=[p=1 q=2] q=[~ [p=~~~23. q=[p=[p=1 q=2] q=""]]]] > (hax [[1 1] "#!"]) [p=[p=1 q=2] q=[~ [p=~~~23. q=[p=[p=1 q=2] q="!"]]]] *** ### `++hep` Parse hyphen Parses ASCII character 45, the hyphen. Source ------ ++ hep (just '-') Examples -------- > (scan "-" hep) ~~- > `cord`(scan "-" hep) '-' > (hep [[1 1] "-"]) [p=[p=1 q=2] q=[~ [p=~~- q=[p=[p=1 q=2] q=""]]]] > (hep [[1 1] ":-"]) [p=[p=1 q=1] q=~] *** ### `++kel` Parse left curley bracket Parses ASCII character 123, the left curly bracket. Note that `{` (`kel`) and `}` (`ker`) open and close a Hoon expression for Hoon string interpolation. To parse either of them, they must be escaped. Source ------ ++ kel (just '{') Examples -------- > (scan "\{" kel) ~~~7b. > `cord`(scan "\{" kel) '{' > (kel [[1 1] "\{"]) [p=[p=1 q=2] q=[~ [p=~~~7b. q=[p=[p=1 q=2] q=""]]]] > (kel [[1 1] " \{"]) [p=[p=1 q=1] q=~] *** ### `++ker` Parse right curley bracket Parses ASCII character 125, the right curly bracket. Note that `{` (`kel`) and `}` (`ker`) open and close a Hoon expression for Hoon string interpolation. To parse either of them, they must be escaped. Source ------ ++ ker (just '}') Examples -------- > (scan "}" ker) ~~~7d. > `cord`(scan "}" ker) '}' > (ker [[1 1] "}"]) [p=[p=1 q=2] q=[~ [p=~~~7d. q=[p=[p=1 q=2] q=""]]]] > (ker [[1 1] "\{}"]) [p=[p=1 q=1] q=~] *** ### `++ket` Parse caret Parses ASCII character 94, the caret. Source ------ ++ ket (just '^') Examples -------- > (scan "^" ket) ~~~5e. > `cord`(scan "^" ket) '^' > (ket [[1 1] "^"]) [p=[p=1 q=2] q=[~ [p=~~~5e. q=[p=[p=1 q=2] q=""]]]] > (ket [[1 1] ".^"]) [p=[p=1 q=1] q=~] *** ### `++lus` Parse plus sign Parses ASCII character 43, the plus sign. Source ------ ++ lus (just '+') Examples -------- > (scan "+" lus) ~~~2b. > `cord`(scan "+" lus) '+' > (lus [[1 1] "+"]) [p=[p=1 q=2] q=[~ [p=~~~2b. q=[p=[p=1 q=2] q=""]]]] > (lus [[1 1] ".+"]) [p=[p=1 q=1] q=~] *** ### `++pam` Parse ampersand Parses ASCII character 38, the ampersand. Source ------ ++ pam (just '&') Examples -------- > (scan "&" pam) ~~~26. > `cord`(scan "&" pam) '&' > (pam [[1 1] "&"]) [p=[p=1 q=2] q=[~ [p=~~~26. q=[p=[p=1 q=2] q=""]]]] > (pam [[1 1] "?&"]) [p=[p=1 q=1] q=~] *** ### `++pat` Parse "at" sign Parses ASCII character 64, the "at" sign. Source ------ ++ pat (just '@') Examples -------- > (scan "@" pat) ~~~4. > `cord`(scan "@" pat) '@' > (pat [[1 1] "@"]) [p=[p=1 q=2] q=[~ [p=~~~4. q=[p=[p=1 q=2] q=""]]]] > (pat [[1 1] "?@"]) [p=[p=1 q=1] q=~] *** ### `++pel` Parse left parenthesis Parses ASCII character 40, the left parenthesis. Source ------ ++ pel (just '(') Examples -------- > (scan "(" pel) ~~~28. > `cord`(scan "(" pel) '(' > (pel [[1 1] "("]) [p=[p=1 q=2] q=[~ [p=~~~28. q=[p=[p=1 q=2] q=""]]]] > (pel [[1 1] ";("]) [p=[p=1 q=1] q=~] *** ### `++per` Parse right parenthesis Parses ASCII character 41, the right parenthesis. Source ------ ++ per (just ')') Examples -------- > (scan ")" per) ~~~29. > `cord`(scan ")" per) ')' > (per [[1 1] ")"]) [p=[p=1 q=2] q=[~ [p=~~~29. q=[p=[p=1 q=2] q=""]]]] > (per [[1 1] " )"]) [p=[p=1 q=1] q=~] *** ### `++sel` Parse left square bracket Parses ASCII character 91, the left square bracket. Source ------ ++ sel (just '[') Examples -------- > (scan "[" sel) ~~~5b. > `cord`(scan "[" sel) '[' > (sel [[1 1] "["]) [p=[p=1 q=2] q=[~ [p=~~~5b. q=[p=[p=1 q=2] q=""]]]] > (sel [[1 1] "-["]) [p=[p=1 q=1] q=~] *** ### `++sem` Parse semicolon Parses ASCII character 59, the semicolon. Source ------ ++ sem (just ';') Examples -------- > (scan ";" sem) ~~~3b. > `cord`(scan ";" sem) ';' > (sem [[1 1] ";"]) [p=[p=1 q=2] q=[~ [p=~~~3b. q=[p=[p=1 q=2] q=""]]]] > (sem [[1 1] " ;"]) [p=[p=1 q=1] q=~] *** ### `++ser` Parse right square bracket Parses ASCII character 93, the right square bracket. Source ------ ++ ser (just ']') Examples -------- > (scan "]" ser) ~~~5d. > `cord`(scan "]" ser) ']' > (ser [[1 1] "]"]) [p=[p=1 q=2] q=[~ [p=~~~5d. q=[p=[p=1 q=2] q=""]]]] > (ser [[1 1] "[ ]"]) [p=[p=1 q=1] q=~] *** ### `++sig` Parse tilde Parses ASCII character 126, the tilde. Source ------ ++ sig (just '~') Examples -------- > (scan "~" sig) ~~~~ > `cord`(scan "~" sig) '~' > (sig [[1 1] "~"]) [p=[p=1 q=2] q=[~ [p=~~~~ q=[p=[p=1 q=2] q=""]]]] > (sig [[1 1] "?~"]) [p=[p=1 q=1] q=~] *** ### `++soq` Parse single quote Parses ASCII character 39, soq. Note the extra '' is to escape the first `soq` because soq delimits a [`++cord`](). Source ------ ++ soq (just '\'') Examples -------- > (scan "'" soq) ~~~27. > `cord`(scan "'" soq) ''' > (soq [[1 1] "'"]) [p=[p=1 q=2] q=[~ [p=~~~27. q=[p=[p=1 q=2] q=""]]]] > (soq [[1 1] ">'"]) [p=[p=1 q=1] q=~] *** ### `++tar` Parse asterisk Parses ASCII character 42, the asterisk. Source ------ ++ tar (just '*') Examples -------- > (scan "*" tar) ~~~2a. > `cord`(scan "*" tar) '*' > (tar [[1 1] "*"]) [p=[p=1 q=2] q=[~ [p=~~~2a. q=[p=[p=1 q=2] q=""]]]] > (tar [[1 1] ".*"]) [p=[p=1 q=1] q=~] *** ### `++tec` Parse backtick Parses ASCII character 96, the backtick (also known as the "grave accent"). Source ------ ++ tec (just '`') :: backTiCk Examples -------- > (scan "`" tec) ~~~6. > `cord`(scan "`" tec) '`' > (tec [[1 1] "`"]) [p=[p=1 q=2] q=[~ [p=~~~6. q=[p=[p=1 q=2] q=""]]]] > (tec [[1 1] " `"]) [p=[p=1 q=1] q=~] *** ### `++tis` Parse equals sign Parses ASCII character 61, the equals sign. Source ------ ++ tis (just '=') Examples -------- > (scan "=" tis) ~~~3d. > `cord`(scan "=" tis) '=' > (tis [[1 1] "="]) [p=[p=1 q=2] q=[~ [p=~~~3d. q=[p=[p=1 q=2] q=""]]]] > (tis [[1 1] "|="]) [p=[p=1 q=1] q=~] *** ### `++wut` Parses question mark Parses ASCII character 63, the question mark. Source ------ ++ wut (just '?') Examples -------- > (scan "?" wut) ~~~3f. > `cord`(scan "?" wut) '?' > (wut [[1 1] "?"]) [p=[p=1 q=2] q=[~ [p=~~~3f. q=[p=[p=1 q=2] q=""]]]] > (wut [[1 1] ".?"]) [p=[p=1 q=1] q=~] *** ### `++zap` Exclamation point Parses ASCII character 33, the exclamation point zap. Source ------ ++ zap (just '!') Examples -------- > (scan "!" zap) ~~~21. > `cord`(scan "!" zap) '!' > (zap [[1 1] "!"]) [p=[p=1 q=2] q=[~ [p=~~~21. q=[p=[p=1 q=2] q=""]]]] > (zap [[1 1] "?!"]) [p=[p=1 q=1] q=~] ***