Module: Purple
- Defined in:
- lib/purple/infix.rb,
lib/purple/sexp_vm.rb,
lib/purple/syntax_nodes.rb
Defined Under Namespace
Modules: Infix Classes: SexpVM
Constant Summary collapse
- Program =
node_def -> { [:program] + elements.map { |e| e.to_a } }
- Statement =
node_def -> { elements.map { |e| e.to_a } }
- NilLiteral =
node_def -> { [:nil] }
- TrueLiteral =
node_def -> { [:true] }
- FalseLiteral =
node_def -> { [:false] }
- IntegerLiteral =
node_def -> { [:int, text_value.to_i] }
- Assignment =
node_def -> { [:assign, elements.first.to_a, elements.last.to_a ] }
- InfixExpression =
node_def -> { unordered = elements.first.elements.map { |e| e.to_a } << elements.last.to_a Purple::Infix.process_infix unordered }
- InfixOperationChain =
node_def -> { elements.map { |e| e.to_a } }
- AssignmentOperator =
node_def -> { }
- AdditionOperator =
node_def -> { :+ }
- SubtractionOperator =
node_def -> { :- }
- MultiplicationOperator =
node_def -> { :* }
- DivisionOperator =
node_def -> { :/ }
- Identifier =
node_def -> { [:ident, text_value] }
- Expression =
node_def -> { # TODO: fix this shit if elements.first.class == InfixExpression elements.first.to_a else elements.map { |e| e.to_a } end }
Class Method Summary collapse
-
.node_def(to_ast) ⇒ Object
given a proc which generates ast for a node, create a subclass of Treetop::Runtime::SyntaxNode for it.
Class Method Details
.node_def(to_ast) ⇒ Object
given a proc which generates ast for a node, create a subclass of Treetop::Runtime::SyntaxNode for it.
e.g., these two are equivalent:
IntegerLiteral = node_def -> { [:int, text_value.to_i] }
class FalseLiteral < Treetop::Runtime::SyntaxNode
def to_a
[:int, text_value.to_i]
end
end
16 17 18 19 20 21 22 23 |
# File 'lib/purple/syntax_nodes.rb', line 16 def self.node_def(to_ast) klass = Class.new(Treetop::Runtime::SyntaxNode) do @to_a_proc = to_ast def to_a self.instance_exec(&self.class.instance_variable_get(:@to_a_proc)) end end end |