class AdLint::Cpp::StringToPPTokensLexer
Public Class Methods
new(str, tab_width = 8)
click to toggle source
Calls superclass method
# File lib/adlint/cpp/lexer.rb, line 775 def initialize(str, tab_width = 8) super(str) @tab_width = tab_width end
Private Instance Methods
create_content(str)
click to toggle source
# File lib/adlint/cpp/lexer.rb, line 791 def create_content(str) StringContent.new(str, @tab_width) end
create_lexer_context(str)
click to toggle source
# File lib/adlint/cpp/lexer.rb, line 781 def create_lexer_context(str) lexer_ctxt = LexerContext.new(create_content(str)) class << lexer_ctxt attr_accessor :last_symbol end lexer_ctxt end
tokenize(lexer_ctxt)
click to toggle source
# File lib/adlint/cpp/lexer.rb, line 795 def tokenize(lexer_ctxt) tok_ary = TokenArray.new until lexer_ctxt.content.empty? next if tokenize_pp_token(lexer_ctxt, tok_ary) loc = lexer_ctxt.location if new_line = lexer_ctxt.content.scan(/\n/) tok_ary.push(Token.new(:NEW_LINE, new_line, loc)) break else lexer_ctxt.content.eat! end end tok_ary end
tokenize_backslash(lexer_ctxt)
click to toggle source
# File lib/adlint/cpp/lexer.rb, line 912 def tokenize_backslash(lexer_ctxt) loc = lexer_ctxt.location backslash = lexer_ctxt.content.scan(/\\/) if backslash lexer_ctxt.last_symbol = :BACKSLASH return Token.new(:PP_TOKEN, backslash, loc, backslash) end nil end
tokenize_constant(lexer_ctxt)
click to toggle source
# File lib/adlint/cpp/lexer.rb, line 842 def tokenize_constant(lexer_ctxt) loc = lexer_ctxt.location # NOTE: For extended bit-access operators. return nil if lexer_ctxt.last_symbol == :IDENTIFIER constant = Language::C.scan_char_constant(lexer_ctxt.content) || Language::C.scan_floating_constant(lexer_ctxt.content) || Language::C.scan_integer_constant(lexer_ctxt.content) if constant lexer_ctxt.last_symbol = :CONSTANT return Token.new(:PP_TOKEN, constant, loc, :CONSTANT) end nil end
tokenize_identifier(lexer_ctxt)
click to toggle source
# File lib/adlint/cpp/lexer.rb, line 886 def tokenize_identifier(lexer_ctxt) loc = lexer_ctxt.location identifier = Language::C.scan_identifier(lexer_ctxt.content) if identifier lexer_ctxt.last_symbol = :IDENTIFIER return Token.new(:PP_TOKEN, identifier, loc, :IDENTIFIER) end nil end
tokenize_keyword(lexer_ctxt)
click to toggle source
# File lib/adlint/cpp/lexer.rb, line 828 def tokenize_keyword(lexer_ctxt) loc = lexer_ctxt.location keyword = Language::C.scan_keyword(lexer_ctxt.content) || Language::Cpp.scan_keyword(lexer_ctxt.content) if keyword lexer_ctxt.last_symbol = :KEYWORD Token.new(:PP_TOKEN, keyword, loc, Language::C::KEYWORDS[keyword]) else nil end end
tokenize_null_constant(lexer_ctxt)
click to toggle source
# File lib/adlint/cpp/lexer.rb, line 873 def tokenize_null_constant(lexer_ctxt) loc = lexer_ctxt.location null_constant = Language::C.scan_null_constant(lexer_ctxt.content) if null_constant lexer_ctxt.last_symbol = :NULL return Token.new(:PP_TOKEN, null_constant, loc, :NULL) end nil end
tokenize_pp_token(lexer_ctxt, tok_ary)
click to toggle source
# File lib/adlint/cpp/lexer.rb, line 811 def tokenize_pp_token(lexer_ctxt, tok_ary) pp_tok = tokenize_keyword(lexer_ctxt) || tokenize_constant(lexer_ctxt) || tokenize_string_literal(lexer_ctxt) || tokenize_null_constant(lexer_ctxt) || tokenize_identifier(lexer_ctxt) || tokenize_punctuator(lexer_ctxt) || tokenize_backslash(lexer_ctxt) if pp_tok tok_ary.push(pp_tok) return true end false end
tokenize_punctuator(lexer_ctxt)
click to toggle source
# File lib/adlint/cpp/lexer.rb, line 899 def tokenize_punctuator(lexer_ctxt) loc = lexer_ctxt.location punctuator = Language::Cpp.scan_punctuator(lexer_ctxt.content) if punctuator lexer_ctxt.last_symbol = :PUNCTUATOR return Token.new(:PP_TOKEN, punctuator, loc, punctuator) end nil end
tokenize_string_literal(lexer_ctxt)
click to toggle source
# File lib/adlint/cpp/lexer.rb, line 860 def tokenize_string_literal(lexer_ctxt) loc = lexer_ctxt.location string_literal = Language::C.scan_string_literal(lexer_ctxt.content) if string_literal lexer_ctxt.last_symbol = :STRING_LITERAL return Token.new(:PP_TOKEN, string_literal, loc, :STRING_LITERAL) end nil end