Packages
expression
2.28.0
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