class AdLint::Cpp::LexerState

Public Class Methods

new(lexer) click to toggle source
# File lib/adlint/cpp/lexer.rb, line 213
def initialize(lexer)
  @lexer = lexer
end

Public Instance Methods

next_token() click to toggle source
# File lib/adlint/cpp/lexer.rb, line 217
def next_token
  subclass_responsibility
end

Private Instance Methods

discard_heading_comments() click to toggle source
# File lib/adlint/cpp/lexer.rb, line 222
def discard_heading_comments
  @lexer.discard_heading_comments
end
scan_escaped_newline(cont) click to toggle source
# File lib/adlint/cpp/lexer.rb, line 226
def scan_escaped_newline(cont)
  loc = cont.location
  case
  when escaped_nl = cont.scan(/\\\n/)
    escaped_nl
  when escaped_nl = cont.scan(/\\[ \t]+\n/)
    @lexer.notify_illformed_newline_escape_found(loc)
    escaped_nl
  else
    nil
  end
end
tokenize_extra_token(cont) click to toggle source
# File lib/adlint/cpp/lexer.rb, line 296
def tokenize_extra_token(cont)
  # NOTE: #tokenize_pp_token can tokenize almost all types of tokens.
  if tok = tokenize_pp_token(cont)
    Token.new(:EXTRA_TOKEN, tok.value, tok.location)
  else
    nil
  end
end
tokenize_header_name(cont) click to toggle source
# File lib/adlint/cpp/lexer.rb, line 270
def tokenize_header_name(cont)
  loc = cont.location
  if val = Language::Cpp.scan_system_header_name(cont)
    return Token.new(:SYS_HEADER_NAME, val, loc)
  elsif val = Language::Cpp.scan_user_header_name(cont)
    return Token.new(:USR_HEADER_NAME, val, loc)
  end
  nil
end
tokenize_identifier(cont) click to toggle source
# File lib/adlint/cpp/lexer.rb, line 280
def tokenize_identifier(cont)
  loc = cont.location
  if val = Language::C.scan_identifier(cont)
    return Token.new(:IDENTIFIER, val, loc)
  end
  nil
end
tokenize_new_line(cont) click to toggle source
# File lib/adlint/cpp/lexer.rb, line 262
def tokenize_new_line(cont)
  loc = cont.location
  if val = cont.scan(/\n/)
    return Token.new(:NEW_LINE, val, loc)
  end
  nil
end
tokenize_pp_token(cont) click to toggle source
# File lib/adlint/cpp/lexer.rb, line 239
def tokenize_pp_token(cont)
  loc = cont.location
  case
  when val = Language::C.scan_keyword(cont),
       val = Language::Cpp.scan_keyword(cont)
    Token.new(:PP_TOKEN, val, loc, Language::C::KEYWORDS[val])
  when val = Language::C.scan_char_constant(cont),
       val = Language::C.scan_floating_constant(cont),
       val = Language::C.scan_integer_constant(cont)
    Token.new(:PP_TOKEN, val, loc, :CONSTANT)
  when val = Language::C.scan_string_literal(cont)
    Token.new(:PP_TOKEN, val, loc, :STRING_LITERAL)
  when val = Language::C.scan_null_constant(cont)
    Token.new(:PP_TOKEN, val, loc, :NULL)
  when val = Language::C.scan_identifier(cont)
    Token.new(:PP_TOKEN, val, loc, :IDENTIFIER)
  when val = Language::Cpp.scan_punctuator(cont)
    Token.new(:PP_TOKEN, val, loc, val)
  else
    nil
  end
end
tokenize_punctuator(cont) click to toggle source
# File lib/adlint/cpp/lexer.rb, line 288
def tokenize_punctuator(cont)
  loc = cont.location
  if punctuator = Language::Cpp.scan_punctuator(cont)
    return Token.new(punctuator, punctuator, loc)
  end
  nil
end