diff --git a/src/akh_lex.erl b/src/akh_lex.erl index 059278d..f6d496b 100644 --- a/src/akh_lex.erl +++ b/src/akh_lex.erl @@ -98,6 +98,8 @@ next(#lexer{source = <>} = Lx) when ?is_id_start(C) -> lex_id(Lx#lexer{source = Rest}, 1); next(#lexer{source = <>} = Lx) when ?is_digit(C) -> lex_number(Lx#lexer{source = Rest}, 1); +next(#lexer{source = <<$", Rest/binary>>} = Lx) -> + handle_string(Lx#lexer{source = Rest}, 1); next(#lexer{source = <>} = Lx) when ?is_space(C) -> next(Lx#lexer{source = Rest, offset = Lx#lexer.offset + 1}); next(#lexer{source = <>, offset = Offset} = Lx) when ?is_op2(T) -> @@ -131,6 +133,14 @@ lex_number( lex_number(#lexer{offset = Offset} = Lx, Len) -> {ok, {number, Offset, Len}, Lx#lexer{offset = Offset + Len}}. +-spec handle_string(#lexer{}, non_neg_integer()) -> return(). +handle_string(#lexer{source = <<$\\, $", Rest/binary>>} = Lx, Len) -> + handle_string(Lx#lexer{source = Rest}, Len + 2); +handle_string(#lexer{source = <<$", Rest/binary>>, offset = Offset} = Lx, Len) -> + {ok, {string, Offset, Len + 1}, Lx#lexer{source = Rest, offset = Offset + Len + 1}}; +handle_string(#lexer{source = <>} = Lx, Len) when C =/= $" -> + handle_string(Lx#lexer{source = Rest}, Len + 1). + -spec new_line(#lexer{}) -> return(). new_line(#lexer{source_map = SourceMap} = Lx) -> next(Lx#lexer{source_map = akh_source_map:insert(Lx#lexer.offset, SourceMap)}).