lib/gisele/language/ast/node.rb in gisele-0.4.0 vs lib/gisele/language/ast/node.rb in gisele-0.5.0

- old
+ new

@@ -1,90 +1,28 @@ module Gisele module Language module AST module Node - # Returns the node markers - def markers - @markers ||= {} + def citrus_match + tracking_markers[:citrus_match] end - # Sets node markers - def markers=(markers) - @markers = markers - end - - # Returns the rule name, that is, the first Symbol element - # of the node array. - # - # Example: - # file = ... path to a .gis file ... - # Gisele.ast(file).rule_name - # # => :unit - # - def rule_name - first - end - - # Returns the children of this node. - # - # Children are defined as all but the rule name in the underlying - # array. - # - def children - self[1..-1] - end - - # Returns the associated ast_module - def ast_module - AST::Helpers.send(:ast_module, self) - end - - # Applies copy-and-transform to this node. - # - # Example: - # node = AST.node([:something, "world", [:subnode ...]]) - # node.copy do |base,child| - # base << ... make something with child ... - # end - # # => [:something, ...] - # - def copy(&block) - base = AST.node([rule_name], markers.dup) - children.inject(base, &block) - end - - # Duplicates this node. - # - # This method ensures that the node marking through modules - # will correctly be applied to the duplicated array. - # - def dup - AST.node(super, markers.dup) - end - # Returns a label for this AST node def label "" end - # Returns attributes to use for dot printing - def dot_attributes - attrs = Language::DOT_ATTRIBUTES[rule_name.to_s] || {} - attrs.merge(:label => label) - end - # Checks validity over the definition def ===(sexp) - SEXP_GRAMMAR[rule_name] === sexp + Language[rule_name] === sexp end end # module Node end # module AST end # module Language end # module Gisele -require_relative 'unit_def' require_relative 'task_call_st' require_relative 'while_st' require_relative 'if_st' require_relative 'else_clause' require_relative 'elsif_clause' @@ -92,6 +30,6 @@ require_relative 'when_clause' require_relative 'bool_expr' require_relative 'bool_and' require_relative 'bool_or' require_relative 'bool_not' -require_relative 'var_ref' +require_relative 'var_ref' \ No newline at end of file