Class: Ruby::Rego::Lexer
- Inherits:
-
Object
- Object
- Ruby::Rego::Lexer
- Defined in:
- lib/ruby/rego/lexer.rb,
lib/ruby/rego/lexer/stream.rb,
lib/ruby/rego/lexer/number_reader.rb,
lib/ruby/rego/lexer/string_reader.rb,
lib/ruby/rego/lexer/template_string_reader.rb
Overview
Template string lexer helpers.
Constant Summary collapse
- KEYWORDS =
{ "package" => TokenType::PACKAGE, "import" => TokenType::IMPORT, "as" => TokenType::AS, "default" => TokenType::DEFAULT, "if" => TokenType::IF, "contains" => TokenType::CONTAINS, "some" => TokenType::SOME, "in" => TokenType::IN, "every" => TokenType::EVERY, "not" => TokenType::NOT, "and" => TokenType::AND, "or" => TokenType::OR, "with" => TokenType::WITH, "else" => TokenType::ELSE, "true" => TokenType::TRUE, "false" => TokenType::FALSE, "null" => TokenType::NULL, "data" => TokenType::DATA, "input" => TokenType::INPUT }.freeze
- SINGLE_CHAR_TOKENS =
{ "(" => TokenType::LPAREN, ")" => TokenType::RPAREN, "[" => TokenType::LBRACKET, "]" => TokenType::RBRACKET, "{" => TokenType::LBRACE, "}" => TokenType::RBRACE, "." => TokenType::DOT, "," => TokenType::COMMA, ";" => TokenType::SEMICOLON, "+" => TokenType::PLUS, "-" => TokenType::MINUS, "*" => TokenType::STAR, "/" => TokenType::SLASH, "%" => TokenType::PERCENT, "|" => TokenType::PIPE, "&" => TokenType::AMPERSAND }.freeze
- COMPOUND_TOKENS =
{ ":" => [TokenType::COLON, TokenType::ASSIGN], "=" => [TokenType::UNIFY, TokenType::EQ], "!" => [nil, TokenType::NEQ], "<" => [TokenType::LT, TokenType::LTE], ">" => [TokenType::GT, TokenType::GTE] }.freeze
- NEWLINE_CHARS =
["\n", "\r"].freeze
- WHITESPACE_CHARS =
[" ", "\t"].freeze
- EXPONENT_CHARS =
%w[e E].freeze
- SIGN_CHARS =
%w[+ -].freeze
- IDENTIFIER_START =
/[A-Za-z_]/- IDENTIFIER_PART =
/[A-Za-z0-9_]/- DIGIT =
/\d/- HEX_DIGIT =
/[0-9A-Fa-f]/- TEMPLATE_ESCAPE =
"\u0000"
Instance Method Summary collapse
-
#initialize(source) ⇒ Lexer
constructor
Create a lexer for the provided source.
-
#tokenize ⇒ Array<Token>
Tokenize the source into a list of tokens, including EOF.
Constructor Details
#initialize(source) ⇒ Lexer
Create a lexer for the provided source.
78 79 80 81 82 83 84 |
# File 'lib/ruby/rego/lexer.rb', line 78 def initialize(source) @source = source.to_s @position = 0 @line = 1 @column = 1 @offset = 0 end |
Instance Method Details
#tokenize ⇒ Array<Token>
Tokenize the source into a list of tokens, including EOF.
89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/ruby/rego/lexer.rb', line 89 def tokenize # @type var tokens: Array[Token] tokens = [] loop do skip_whitespace break if eof? tokens << next_token end tokens << eof_token tokens end |