Sha256: 3236f81eed8ddc6a6e2613d15a998129161fe8d56e3a49afc97bfe783b36788f
Contents?: true
Size: 1.24 KB
Versions: 1
Compression:
Stored size: 1.24 KB
Contents
# frozen_string_literal: true module Rus3 module AST require_relative "ast/error" module Utils class << self def camel_case(snake_case) snake_case.to_s.split("_").map(&:capitalize).join("") end end end class Node attr_reader :literal def initialize(literal = nil) @literal = literal end def leaf?; false; end def branch?; false; end def illegal?; false; end def type; nil; end def to_s @literal end end class IllegalNode < Node def initialize(ast_type, literal) super(literal) @given_type = ast_type end def illegal? true end def type @given_type end def to_s "type: #{@given_type}, literal: #{@literal}" end end require_relative "ast/leaf_node" require_relative "ast/branch_node" class << self def instantiate(ast_type, literal = nil) klass_name = Utils.camel_case(ast_type) + "Node" klass = AST.const_get(klass_name) if klass.nil? or klass == IllegalNode IllegalNode.new(ast_type, literal) else klass.new(literal) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rus3-0.2.0 | lib/rus3/ast.rb |