module SQLiterate

grammar Literals
  include Space
  include Identifier
  include Keywords
  include String

  rule literal_value
    multi_string / numeric_literal / boolean_literal
  end

  rule positional_param
    '$' digits <Node::PositionalParam>
  end

  rule numeric_literal
    decimal_literal exponent_literal <Node::NumericLiteral>
    /
    decimal_literal
  end

  rule decimal_literal
    ( digits ( '.' digits? )? / '.' digits ) <Node::DecimalLiteral>
  end

  rule exponent_literal
    'e' s:( '+' / '-' )? digits <Node::ExponentLiteral>
  end

  rule digits
    [0-9]+ <Node::Digits>
  end

  rule boolean_literal
    true_kw <Node::Boolean::True>
    /
    false_kw <Node::Boolean::False>
  end
end

end