Packages
expression
2.32.1
2.49.1
2.49.0
2.48.0
2.47.5
2.47.4
2.47.3
2.47.2
2.47.1
2.47.0
2.46.0
2.45.1
2.45.0
2.44.1
2.44.0
2.43.0
2.42.1
2.41.4
2.41.3
2.41.2
2.41.0
2.40.0
2.38.0
2.37.0
2.36.2
2.36.1
2.36.0
2.35.0
2.34.0
2.33.1
2.33.0
2.32.1
2.31.6
2.31.3
2.31.0
2.30.0
2.28.0
2.27.3
2.27.2
2.27.1
2.27.0
2.26.1
2.26.0
2.25.0
2.24.2
2.24.1
2.24.0
2.23.9
2.23.8
2.23.7
2.23.6
2.23.4
2.23.3
2.23.2
2.23.1
2.23.0
2.22.2
2.22.0
2.21.0
2.20.0
2.19.0
2.18.0
2.17.0
2.16.0
2.14.0
2.13.0
2.12.0
2.11.0
2.10.1
2.10.0
2.9.0
2.8.0
2.6.0
2.5.8
2.5.7
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.1
2.4.0
2.3.2
2.3.1
2.3.0
2.2.1
2.2.0
2.1.1
2.1.0
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.1.1
1.1.0
1.0.0
0.7.2
0.7.1
0.7.0
0.6.0
0.5.0
0.4.3
0.4.2
0.4.1
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.1.0
A Excel like expression parser, compatible with FLOIP Expression language.
Current section
Files
Jump to
Current section
Files
lib/literal_helpers.ex
defmodule Expression.LiteralHelpers do @moduledoc false import NimbleParsec def int do optional(string("-")) |> times( choice([ integer(min: 1), ignore(utf8_char([?_])) ]), min: 1 ) |> reduce({Enum, :join, [""]}) |> map({String, :to_integer, []}) end def float do optional(string("-")) |> concat(utf8_string([?0..?9], min: 1)) |> concat(string(".")) |> concat(utf8_string([?0..?9], min: 1)) |> reduce({Enum, :join, [""]}) |> map({String, :to_float, []}) end def numeric do choice([int(), float()]) end def single_quoted_string do ignore(ascii_char([?'])) |> repeat_while( choice([ string(~S(\')) |> replace(?'), utf8_char([]) ]), {:not_single_quote, []} ) |> ignore(ascii_char([?'])) |> reduce({List, :to_string, []}) end def double_quoted_string do ignore(ascii_char([?"])) |> repeat_while( choice([ string(~S(\")) |> replace(?"), utf8_char([]) ]), {:not_double_quote, []} ) |> ignore(ascii_char([?"])) |> reduce({List, :to_string, []}) end def not_double_quote(<<?", _::binary>>, context, _, _), do: {:halt, context} def not_double_quote(_, context, _, _), do: {:cont, context} def not_single_quote(<<?', _::binary>>, context, _, _), do: {:halt, context} def not_single_quote(_, context, _, _), do: {:cont, context}end