Class: Expressir::Express::Parser::Parser

Inherits:
Parslet::Parser
  • Object
show all
Defined in:
lib/expressir/express/parser.rb

Constant Summary collapse

KEYWORDS =
%i[
  ABS ABSTRACT ACOS AGGREGATE ALIAS AND ANDOR ARRAY AS ASIN ATAN BAG BASED_ON
  BEGIN BINARY BLENGTH BOOLEAN BY CASE CONSTANT CONST_E COS DERIVE DIV ELSE
  END END_ALIAS END_CASE END_CONSTANT END_ENTITY END_FUNCTION END_IF
  END_LOCAL END_PROCEDURE END_REPEAT END_RULE END_SCHEMA
  END_SUBTYPE_CONSTRAINT END_TYPE ENTITY ENUMERATION ESCAPE EXISTS EXP
  EXTENSIBLE FALSE FIXED FOR FORMAT FROM FUNCTION GENERIC GENERIC_ENTITY
  HIBOUND HIINDEX IF IN INSERT INTEGER INVERSE LENGTH LIKE LIST LOBOUND LOCAL
  LOG LOG10 LOG2 LOGICAL LOINDEX MOD NOT NUMBER NVL ODD OF ONEOF OPTIONAL OR
  OTHERWISE PI PROCEDURE QUERY REAL REFERENCE REMOVE RENAMED REPEAT RETURN
  ROLESOF RULE SCHEMA SELECT SELF SET SIN SIZEOF SKIP SQRT STRING SUBTYPE
  SUBTYPE_CONSTRAINT SUPERTYPE TAN THEN TO TRUE TYPE TYPEOF TOTAL_OVER UNIQUE
  UNKNOWN UNTIL USE USEDIN VALUE VALUE_IN VALUE_UNIQUE VAR WITH WHERE WHILE
  XOR
].freeze

Instance Method Summary collapse

Instance Method Details

#cstr(atom) ⇒ Object



14
15
16
# File 'lib/expressir/express/parser.rb', line 14

def cstr(atom)
  cts(str(atom).as(:str))
end

#cts(atom) ⇒ Object



10
11
12
# File 'lib/expressir/express/parser.rb', line 10

def cts(atom)
  spaces >> atom
end

#keyword_rule(str) ⇒ Object



34
35
36
37
38
39
# File 'lib/expressir/express/parser.rb', line 34

def keyword_rule(str)
  key_chars = str.to_s.chars
  key_chars
    .collect! { |char| match("[#{char}#{char.downcase}]") }
    .reduce(:>>) >> match["a-zA-Z0-9_"].absent?
end