Module: Confuscript

Defined in:
lib/confuscript.rb,
lib/confuscript/version.rb,
lib/confuscript/nodes/base_node.rb,
lib/confuscript/nodes/block_node.rb,
lib/confuscript/nodes/comment_node.rb,
lib/confuscript/nodes/if_else_node.rb,
lib/confuscript/nodes/program_node.rb,
lib/confuscript/nodes/assignment_node.rb,
lib/confuscript/nodes/expression_node.rb,
lib/confuscript/nodes/print/void_node.rb,
lib/confuscript/nodes/loops/while_node.rb,
lib/confuscript/nodes/console_input_node.rb,
lib/confuscript/nodes/values/number_node.rb,
lib/confuscript/nodes/values/string_node.rb,
lib/confuscript/nodes/initialization_node.rb,
lib/confuscript/nodes/values/boolean_node.rb,
lib/confuscript/nodes/values/variable_node.rb,
lib/confuscript/nodes/print/print_call_node.rb,
lib/confuscript/nodes/operators/addition_node.rb,
lib/confuscript/nodes/operators/division_node.rb,
lib/confuscript/nodes/operators/equality_node.rb,
lib/confuscript/nodes/operators/less_than_node.rb,
lib/confuscript/nodes/operators/subtraction_node.rb,
lib/confuscript/nodes/expressions/arithmetic_node.rb,
lib/confuscript/nodes/expressions/comparison_node.rb,
lib/confuscript/nodes/operators/greater_than_node.rb,
lib/confuscript/nodes/operators/non_equality_node.rb,
lib/confuscript/nodes/print/print_definition_node.rb,
lib/confuscript/nodes/operators/multiplication_node.rb,
lib/confuscript/nodes/operators/less_than_or_equal_node.rb,
lib/confuscript/nodes/operators/greater_than_or_equal_node.rb

Defined Under Namespace

Modules: Nodes Classes: Error, SyntaxError, VoidEncountered

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.interpret(code) ⇒ Object

Raises:



71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/confuscript.rb', line 71

def self.interpret(code)
  ast = parser.parse(code)

  # Check if parsing was successful
  raise SyntaxError, parser.failure_reason if ast.nil?

  # Create a new context
  context = {}

  # Evaluate the AST
  ast.evaluate(context)

  context
end

.parserObject



60
61
62
63
64
65
66
67
68
69
# File 'lib/confuscript.rb', line 60

def self.parser
  @parser ||= if File.file?("#{File.dirname(__FILE__)}/confuscript/grammar.rb")
                # Take compiled one
                require_relative "grammar"
              else
                # Else compile and load
                Treetop.load "#{File.dirname(__FILE__)}/confuscript/grammar.treetop"
                ConfuscriptParser.new
              end
end