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

- old
+ new

@@ -1,45 +1,31 @@ +require 'yaml' module Gisele - module Language - require 'yaml' - DOT_ATTRIBUTES = YAML.load_file(Path.dir/"language/grammar.dot.yml") - SEXP_GRAMMAR = SexpGrammar.load Path.dir/"language/grammar.sexp.yml" + # Load the Language through Sexpr + Language = Sexpr.load Path.dir/"language/grammar.sexp.yml" - RESERVED_WORDS = [ - "if", - "else", - "elsif", - "when", - "while", - "seq", - "par", - "task", - "refinement", - "fluent", - "trackvar", - "initially", - "end", - "not", - "or", - "and", - "true", - "false" - ] + # Load syntax nodes, abstract syntax nodes, and processors + require_relative 'language/syntax/node' + require_relative 'language/ast/node' + require_relative 'language/processors' - def rule2mod(rule) - rule.to_s.gsub(/(^|_)([a-z])/){|x| $2.capitalize}.to_sym + # Force loading the Citrus parser now + Language.parser.parser + + module Language + + # By default, Sexpr will find for abstract nodes under Language itself. We + # override that behavior here and let it know that the AST module is the + # parent of all ast nodes. + def tagging_reference + AST end - module_function :rule2mod - def mod2rule(mod) - mod = mod.name.to_s.split('::').last.to_sym if mod.is_a?(Module) - mod.to_s.gsub(/[A-Z]/){|x| "_#{x.downcase}"}[1..-1].to_sym + # The tagging function (from s-expr kind to AST module) is not complete so far. + # This allows us to at least include the AST:Node module in all s-expressions. + def default_tagging_module + AST::Node end - module_function :mod2rule end # module Language -end # module Gisele -require_relative 'language/syntax' -require_relative 'language/ast' -require_relative 'language/rewriter' -require_relative 'language/processors' +end # module Gisele \ No newline at end of file