class Daedalus::DependencyGrapher::FileParser
Parses a file for all preprocessor control directives into a tree of Node
objects. The parser can operate on a file or an array of lines.
Attributes
directories[R]
line[R]
Public Class Methods
new(root, directories)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 338 def initialize(root, directories) 339 @stack = [root] 340 @directories = directories 341 end
Public Instance Methods
add_body(node)
click to toggle source
Parser operations
# File lib/daedalus/dependency_grapher.rb 345 def add_body(node) 346 @stack.last.body << node 347 end
add_else(node)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 349 def add_else(node) 350 @stack.last.add_else node 351 end
close()
click to toggle source
# File lib/daedalus/dependency_grapher.rb 365 def close 366 @stack.last.close 367 end
parse(lines)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 437 def parse(lines) 438 @line = 0 439 440 re = /^\s*#(include|ifdef|ifndef|endif|else|define|undef|if|elif)(.*)$/o 441 full_line = "" 442 443 lines.each do |line| 444 @line += 1 445 446 full_line.chomp! 447 448 if line[-2] == ?\\ 449 full_line += line.chomp("\\\n") + "\n" 450 next 451 else 452 full_line += line 453 end 454 455 m = full_line.match re 456 full_line = "" 457 458 send :"process_#{m[1]}", m[2] if m 459 end 460 end
parse_file(name)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 428 def parse_file(name) 429 parse IO.readlines(name, :encoding => "ascii-8bit") 430 end
process_define(macro)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 402 def process_define(macro) 403 node = Define.new macro, self 404 add_body node 405 end
process_elif(expression)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 418 def process_elif(expression) 419 node = ElseIf.new expression, self 420 add_else node 421 add_body node 422 stack_push node 423 end
process_else(rest)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 397 def process_else(rest) 398 node = Else.new self 399 add_else node 400 end
process_endif(rest)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 393 def process_endif(rest) 394 close 395 end
process_if(expression)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 412 def process_if(expression) 413 node = If.new expression, self 414 add_body node 415 stack_push node 416 end
process_ifdef(macro)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 381 def process_ifdef(macro) 382 node = IfDefined.new macro, self 383 add_body node 384 stack_push node 385 end
process_ifndef(macro)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 387 def process_ifndef(macro) 388 node = IfNotDefined.new macro, self 389 add_body node 390 stack_push node 391 end
process_include(name)
click to toggle source
Events
# File lib/daedalus/dependency_grapher.rb 371 def process_include(name) 372 # We do not process any <files>. This could be enabled as 373 # an option, but we don't need it or want it now. 374 name =~ /\s*"([^"]+)".*$/ 375 return unless $1 376 377 node = IncludedFile.new $1, self 378 add_body node 379 end
process_undef(macro)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 407 def process_undef(macro) 408 node = Undefine.new macro, self 409 add_body node 410 end
stack_pop()
click to toggle source
# File lib/daedalus/dependency_grapher.rb 357 def stack_pop 358 @stack.pop 359 end
stack_push(node)
click to toggle source
# File lib/daedalus/dependency_grapher.rb 353 def stack_push(node) 354 @stack.push node 355 end
stack_top()
click to toggle source
# File lib/daedalus/dependency_grapher.rb 361 def stack_top 362 @stack.last 363 end