gogotanaka/Hilbert

View on GitHub
lib/hilbert/parser/world_parser.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Hilbert
  module Parser
    class WorldParser
      @@parsed_ary = []
      @@stage
      class << self
        def execute(lexeds)
          clear!

          lexeds.each do |lexed|
            parsed =  case lexed[:token]
                      when :DISJ   then ' + '
                      when :CONJ   then ' * '
                      when :COND   then ' >= '
                      when :BICO   then ' <=> '
                      when :PROVAR then "$world.atom(:#{lexed[:value]})"
                      when :NEGA   then " ~"
                      else              lexed[:value]
                      end

            push(parsed)
          end
        end

        def push(parsed)
          if parsed
            @@parsed_ary << parsed
          else
            @@stage << lexed
          end
        end

        def parsed_srt
          @@parsed_ary.join
        end

        def clear!
          @@parsed_ary = []
        end
      end
    end
  end
end