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