Class: Gitlab::Ci::Pipeline::Expression::Lexer

Inherits:
Object
  • Object
show all
Includes:
Utils::StrongMemoize
Defined in:
lib/gitlab/ci/pipeline/expression/lexer.rb

Constant Summary collapse

SyntaxError =
Class.new(Expression::ExpressionError)
LEXEMES =
[
  Expression::Lexeme::ParenthesisOpen,
  Expression::Lexeme::ParenthesisClose,
  Expression::Lexeme::Variable,
  Expression::Lexeme::String,
  Expression::Lexeme::Pattern,
  Expression::Lexeme::Null,
  Expression::Lexeme::Equals,
  Expression::Lexeme::Matches,
  Expression::Lexeme::NotEquals,
  Expression::Lexeme::NotMatches,
  Expression::Lexeme::And,
  Expression::Lexeme::Or
].freeze
MAX_TOKENS =
100

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(statement, max_tokens: MAX_TOKENS) ⇒ Lexer

Returns a new instance of Lexer.



33
34
35
36
# File 'lib/gitlab/ci/pipeline/expression/lexer.rb', line 33

def initialize(statement, max_tokens: MAX_TOKENS)
  @scanner = StringScanner.new(statement)
  @max_tokens = max_tokens
end

Class Method Details

.lexemesObject



27
28
29
# File 'lib/gitlab/ci/pipeline/expression/lexer.rb', line 27

def self.lexemes
  LEXEMES
end

Instance Method Details

#lexemesObject



42
43
44
# File 'lib/gitlab/ci/pipeline/expression/lexer.rb', line 42

def lexemes
  tokens.map(&:to_lexeme)
end

#tokensObject



38
39
40
# File 'lib/gitlab/ci/pipeline/expression/lexer.rb', line 38

def tokens
  strong_memoize(:tokens) { tokenize }
end