This simple module is very useful in the cases where one needs to define deeply nested ASTs from Ruby code, for example, in tests. It should be used like this:
describe YourLanguage::AST do include Sexp it "should correctly parse expressions" do YourLanguage.parse("1 + 2 * 3").should == s(:add, s(:integer, 1), s(:multiply, s(:integer, 2), s(:integer, 3))) end end
This way the amount of boilerplate code is greatly reduced.
Creates a {Node} with type `type` and children `children`. Note that the resulting node is of the type AST::Node and not a subclass. This would not pose a problem with comparisons, as {Node#==} ignores metadata.
# File lib/ast/sexp.rb, line 26 def s(type, *children) Node.new(type, children) end
Generated with the Darkfish Rdoc Generator 2.