Class: Ruby::Rego::Parser
- Inherits:
-
Object
- Object
- Ruby::Rego::Parser
- Defined in:
- lib/ruby/rego/parser.rb,
lib/ruby/rego/parser/query.rb,
lib/ruby/rego/parser/rules.rb,
lib/ruby/rego/parser/precedence.rb,
lib/ruby/rego/parser/references.rb,
lib/ruby/rego/parser/collections.rb,
lib/ruby/rego/parser/expressions.rb
Overview
Parsing helpers for expressions. rubocop:disable Metrics/ClassLength
Defined Under Namespace
Modules: Helpers, Precedence Classes: BracketMatcher, IdentifierContext, RuleHeadPathBuilder
Constant Summary collapse
- IDENTIFIER_TOKEN_TYPES =
[TokenType::IDENT, TokenType::DATA, TokenType::INPUT].freeze
- IDENTIFIER_TOKEN_NAMES =
{ TokenType::DATA => "data", TokenType::INPUT => "input" }.freeze
- BINARY_OPERATOR_MAP =
{ TokenType::ASSIGN => :assign, TokenType::UNIFY => :unify, TokenType::IN => :in, TokenType::OR => :or, TokenType::AND => :and, TokenType::EQ => :eq, TokenType::NEQ => :neq, TokenType::LT => :lt, TokenType::LTE => :lte, TokenType::GT => :gt, TokenType::GTE => :gte, TokenType::PLUS => :plus, TokenType::MINUS => :minus, TokenType::STAR => :mult, TokenType::SLASH => :div, TokenType::PERCENT => :mod }.freeze
- UNARY_OPERATOR_MAP =
{ TokenType::NOT => :not, TokenType::MINUS => :minus }.freeze
- PRIMARY_PARSERS =
{ TokenType::STRING => :parse_string_literal, TokenType::TEMPLATE_STRING => :parse_template_string, TokenType::RAW_STRING => :parse_string_literal, TokenType::RAW_TEMPLATE_STRING => :parse_template_string, TokenType::NUMBER => :parse_number_literal, TokenType::TRUE => :parse_boolean_literal, TokenType::FALSE => :parse_boolean_literal, TokenType::NULL => :parse_null_literal, TokenType::NOT => :parse_unary_expression, TokenType::MINUS => :parse_unary_expression, TokenType::EVERY => :parse_every, TokenType::LPAREN => :parse_parenthesized_expression, TokenType::LBRACKET => :parse_array, TokenType::LBRACE => :parse_braced_literal, TokenType::IDENT => :parse_identifier_expression, TokenType::DATA => :parse_identifier_expression, TokenType::INPUT => :parse_identifier_expression, TokenType::UNDERSCORE => :parse_identifier_expression }.freeze
- PACKAGE_PATH_TOKEN_TYPES =
[TokenType::IDENT].freeze
- IMPORT_PATH_TOKEN_TYPES =
IDENTIFIER_TOKEN_TYPES
Class Method Summary collapse
-
.parse_expression_from_string(source) ⇒ Object
Parse a single Rego expression from source.
Instance Method Summary collapse
-
#initialize(tokens) ⇒ Parser
constructor
Create a parser from a token list.
-
#parse ⇒ AST::Module
Parse the token stream into an AST module.
Constructor Details
#initialize(tokens) ⇒ Parser
Create a parser from a token list.
77 78 79 80 81 |
# File 'lib/ruby/rego/parser.rb', line 77 def initialize(tokens) @tokens = tokens.dup @current = 0 @errors = [] # @type var errors: Array[ParserError] end |
Class Method Details
.parse_expression_from_string(source) ⇒ Object
Parse a single Rego expression from source.
203 204 205 206 207 208 209 |
# File 'lib/ruby/rego/parser.rb', line 203 def parse_expression_from_string(source) tokens = Lexer.new(source.to_s).tokenize parser = new(tokens) expression = parser.send(:parse_expression) parser.send(:consume, TokenType::EOF, "Expected end of expression.") expression end |
Instance Method Details
#parse ⇒ AST::Module
Parse the token stream into an AST module.
86 87 88 89 90 91 |
# File 'lib/ruby/rego/parser.rb', line 86 def parse module_node = parse_module raise errors.first if errors.any? module_node end |