first draft of string handling
This commit is contained in:
parent
294239abb9
commit
74ee1e374e
1 changed files with 10 additions and 0 deletions
|
@ -98,6 +98,8 @@ next(#lexer{source = <<C, Rest/binary>>} = Lx) when ?is_id_start(C) ->
|
||||||
lex_id(Lx#lexer{source = Rest}, 1);
|
lex_id(Lx#lexer{source = Rest}, 1);
|
||||||
next(#lexer{source = <<C, Rest/binary>>} = Lx) when ?is_digit(C) ->
|
next(#lexer{source = <<C, Rest/binary>>} = Lx) when ?is_digit(C) ->
|
||||||
lex_number(Lx#lexer{source = Rest}, 1);
|
lex_number(Lx#lexer{source = Rest}, 1);
|
||||||
|
next(#lexer{source = <<$", Rest/binary>>} = Lx) ->
|
||||||
|
handle_string(Lx#lexer{source = Rest}, 1);
|
||||||
next(#lexer{source = <<C, Rest/binary>>} = Lx) when ?is_space(C) ->
|
next(#lexer{source = <<C, Rest/binary>>} = Lx) when ?is_space(C) ->
|
||||||
next(Lx#lexer{source = Rest, offset = Lx#lexer.offset + 1});
|
next(Lx#lexer{source = Rest, offset = Lx#lexer.offset + 1});
|
||||||
next(#lexer{source = <<T:2/binary, Rest/binary>>, offset = Offset} = Lx) when ?is_op2(T) ->
|
next(#lexer{source = <<T:2/binary, Rest/binary>>, offset = Offset} = Lx) when ?is_op2(T) ->
|
||||||
|
@ -131,6 +133,14 @@ lex_number(
|
||||||
lex_number(#lexer{offset = Offset} = Lx, Len) ->
|
lex_number(#lexer{offset = Offset} = Lx, Len) ->
|
||||||
{ok, {number, Offset, Len}, Lx#lexer{offset = Offset + 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 = <<C, Rest/binary>>} = Lx, Len) when C =/= $" ->
|
||||||
|
handle_string(Lx#lexer{source = Rest}, Len + 1).
|
||||||
|
|
||||||
-spec new_line(#lexer{}) -> return().
|
-spec new_line(#lexer{}) -> return().
|
||||||
new_line(#lexer{source_map = SourceMap} = Lx) ->
|
new_line(#lexer{source_map = SourceMap} = Lx) ->
|
||||||
next(Lx#lexer{source_map = akh_source_map:insert(Lx#lexer.offset, SourceMap)}).
|
next(Lx#lexer{source_map = akh_source_map:insert(Lx#lexer.offset, SourceMap)}).
|
||||||
|
|
Loading…
Add table
Reference in a new issue