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