def lexemes

qasim-bend-kit@0.1.0.2 · libs/JSON.bend:996

import qasim-bend-kit@0.1.0.2/libs/JSON.bend as JSON
import Base

996def lexemes(text: String,
997            +mode: LexMode,
998            reversed: String,
999            acc: List<&2, Lexeme>,
1000            action: LexAction) -> List<&2, Lexeme>:
1001    match text action:
1002        case SNil{} LexStop{}:
1003            lex_end(mode, reversed, acc)
1004        case SNil{} _:
1005            List.reverse(&2, Lexeme, flush_lexeme(reversed, acc))
1006        case SCon{h, +t} LexStop{}:
1007            lexemes(t, mode, SCon{h, reversed}, acc, lex_seed_action(t, mode))
1008        case SCon{h, +t} LexEscapedChar{}:
1009            lexemes(t, Quoted{}, SCon{h, reversed}, acc, lex_seed_action(t, Quoted{}))
1010        case SCon{_, +t} LexBackslash{}:
1011            lexemes(t, Escaped{}, SCon{'\\', reversed}, acc, lex_seed_action(t, Escaped{}))
1012        case SCon{_, +t} LexStringEnd{}:
1013            lexemes(t, Outside{}, SNil{}, Payload{String.reverse(SCon{'"', reversed})} <> acc, lex_seed_action(t, Outside{}))
1014        case SCon{h, +t} LexStringChar{}:
1015            lexemes(t, Quoted{}, SCon{h, reversed}, acc, lex_seed_action(t, Quoted{}))
1016        case SCon{_, +t} LexQuote{}:
1017            lexemes(t, Quoted{}, SCon{'"', SNil{}}, flush_lexeme(reversed, acc), lex_seed_action(t, Quoted{}))
1018        case SCon{_, +t} LexWhitespace{}:
1019            lexemes(t, Outside{}, SNil{}, flush_lexeme(reversed, acc), lex_seed_action(t, Outside{}))
1020        case SCon{_, +t} LexPunctuation{character}:
1021            lexemes(t, Outside{}, SNil{}, Punctuation{character} <> flush_lexeme(reversed, acc), lex_seed_action(t, Outside{}))
1022        case SCon{h, +t} LexRaw{}:
1023            lexemes(t, Outside{}, SCon{h, reversed}, acc, lex_seed_action(t, Outside{}))

Uses (11)

Used by (8)