Sha256: 6074c20dc7be8938475b57d12f6b919b78d6400277cb771a269f33ce832ec854

Contents?: true

Size: 1.74 KB

Versions: 6

Compression:

Stored size: 1.74 KB

Contents

# encoding: utf-8

module Antelope
  module Ace

    # Defines a precedence.  A precedence has a type, tokens, and a
    # level.
    class Precedence < Struct.new(:type, :tokens, :level)

      # @!attribute [rw] type
      #   The type of precedence level.  This should be one of
      #   `:left`, `:right`, or `:nonassoc`.
      #
      #   @return [Symbol] the type.
      # @!attribute [rw] tokens
      #   An set of tokens that are on this specific precedence
      #   level.  The tokens are identified as symbols.  The special
      #   symbol, `:_`, represents any token.
      #
      #   @return [Set<Symbol>] the tokens on this level.
      # @!attribute [rw] level
      #   The level we're on.  The higher the level, the higher the
      #   precedence.

      include Comparable

      # Compares the other object to this object.  If the other object
      # isn't a {Precedence}, it returns nil.  If the other
      # precedence isn't on the same level as this one, then the
      # levels are compared and the result of that is returned.  If
      # it is, however, the type is checked; if this precedence is
      # left associative, then it returns 1 (it is greater than the
      # other); if this precedence is right associative, then it
      # returns -1 (it is less than the other); if this precedence is
      # nonassociative, it returns 0 (it is equal to the other).
      #
      # @param other [Object] the object to compare to this one.
      # @return [Numeric?]
      def <=>(other)
        return nil unless other.is_a? Precedence
        if level != other.level
          level <=> other.level
        elsif type == :left
          1
        elsif type == :right
          -1
        else
          0
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
antelope-0.1.7 lib/antelope/ace/precedence.rb
antelope-0.1.6 lib/antelope/ace/precedence.rb
antelope-0.1.5 lib/antelope/ace/precedence.rb
antelope-0.1.4 lib/antelope/ace/precedence.rb
antelope-0.1.3 lib/antelope/ace/precedence.rb
antelope-0.1.2 lib/antelope/ace/precedence.rb