Sha256: 2c7735cd36468cb112603872340305a449a47e9883c3d89bb3839fa2a15d715f
Contents?: true
Size: 1.66 KB
Versions: 1
Compression:
Stored size: 1.66 KB
Contents
require_relative 'errors' require_relative 'validator' require_relative 'tokenizer' # Environment type module Environment TEST = 1 PROD = 2 end # Parser is used to validate the user input and parse it to the tokenizer class Parser include ErrorMessages include Validator include Environment def initialize(env_type = Environment::TEST) @ENV_TYPE = env_type @tokenizer = Tokenizer.new end def run loop do print 'zakichan> ' if @ENV_TYPE == Environment::PROD token = '' until (validate_token token).nil? && token != '' crr_input = STDIN.gets.chomp token << crr_input break if crr_input == '' end parse token end end def split_token(token) result = [] token.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/).each do |t| if !t.string? && (t.include?('(') || t.include?(')')) t.to_s.split(/(\(|\))/).each { |p| result << p } else result << t end end result end def parse(token) token_error = validate_token token result = if token_error.nil? @tokenizer.tokenize split_token token else token_error end print_result result unless result.to_s.empty? end def validate_token(token) if !balanced_brackets? token unbalanced_brackets_error elsif !balanced_quotes? token unbalanced_quotes_error end end def print_result(result) to_remove = result.to_s.list? || result.to_s.pair? || result.to_s.quote? result = result.delete('\'') if to_remove puts result if @ENV_TYPE == Environment::PROD result end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
lisp-interpreter-0.1.0 | lib/lisp/interpreter/parser.rb |