Current section

Files

Jump to
expression lib operator_helpers.ex
Raw

lib/operator_helpers.ex

defmodule Expression.OperatorHelpers do
@moduledoc false
import NimbleParsec
def plus(combinator \\ empty()), do: combinator |> ascii_char([?+]) |> replace(:+) |> label("+")
def minus(combinator \\ empty()),
do: combinator |> ascii_char([?-]) |> replace(:-) |> label("-")
def times(combinator \\ empty()),
do: combinator |> ascii_char([?*]) |> replace(:*) |> label("*")
def divide(combinator \\ empty()),
do: combinator |> ascii_char([?/]) |> replace(:/) |> label("/")
def concatenate(combinator \\ empty()),
do: combinator |> ascii_char([?&]) |> replace(:&) |> label("&")
def exponent(combinator \\ empty()),
do: combinator |> ascii_char([?^]) |> replace(:^) |> label("^")
def gte(combinator \\ empty()), do: combinator |> string(">=") |> replace(:>=) |> label(">=")
def lte(combinator \\ empty()), do: combinator |> string("<=") |> replace(:<=) |> label("<=")
def neq(combinator \\ empty()),
do: combinator |> choice([string("!="), string("<>")]) |> replace(:!=) |> label("!=")
def eq(combinator \\ empty()),
do: combinator |> choice([string("=="), string("=")]) |> replace(:==) |> label("==")
def gt(combinator \\ empty()), do: combinator |> ascii_char([?>]) |> replace(:>) |> label(">")
def lt(combinator \\ empty()), do: combinator |> ascii_char([?<]) |> replace(:<) |> label("<")
def and_op(combinator \\ empty()),
do:
combinator
|> string("and")
|> lookahead_not(ascii_char([?a..?z, ?A..?Z, ?0..?9, ?_]))
|> replace(:and)
|> label("and")
def or_op(combinator \\ empty()),
do:
combinator
|> string("or")
|> lookahead_not(ascii_char([?a..?z, ?A..?Z, ?0..?9, ?_]))
|> replace(:or)
|> label("or")
def not_op(combinator \\ empty()),
do:
combinator
|> string("not")
|> lookahead_not(ascii_char([?a..?z, ?A..?Z, ?0..?9, ?_]))
|> replace(:not)
|> label("not")
end