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{}))