Sha256: 21520481300178190aec9063229a54d450ee13234d136d337e6d6b82650ca3e6

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

require_relative '../feature/feature_struct_def_bearer'
module Zenlish
  module Lex
    # A word in the abstract sense; an individual, distinct item of a lexicon
    # that belongs to a word class and of which a number of actual word forms
    # may exist. For instance, the word forms: 'hide', 'hides', 'hid', 'hidden'
    # relate to the lexeme for verb 'hide'. Also called 'dictionary word'.
    class Lexeme
      include Feature::FeatureStructDefBearer

      # @return [Zenlish::WClasses::WordClass] the word class to which the lexeme belongs
      attr_reader :wclass

      # @param aWClass [WClasses::WordClass, Rley::Syntax::Terminal]
      # @param anEntry [Zenlish::LexicalEntry]
      # @param aFeatureHash [Hash, NilClass]
      def initialize(aWClass, anEntry, aFeatureHash = nil)
        @wclass = aWClass
        @entry = anEntry.object_id
        anEntry.add_lexeme(self)

        p_struct = aWClass.kind_of?(WClasses::WordClass) ? aWClass.struct : nil
        overriding_struct_defs = aFeatureHash.nil? ? {} : aFeatureHash
        init_struct_def(p_struct, overriding_struct_defs)
      end

      # @return [Zenlish::Lex::LexicalEntry] Link to its dictionary entry (headword)
      def entry
        ObjectSpace._id2ref(@entry)
      end

      # Inflect the lexeme according the default paradigm of the word class.
      # @param constraints [Array] Array of values (for each heading of inflection table
      # @return [String] The word form (spelling) inflected to the given contraints.
      def inflect(constraints)
        table = paradigm
        table.inflect(self, constraints)
      end

      # @return [String] the base (dictionary) form.
      def lemma
        entry.lemma
      end

      # Return the inflection paradigm for the lexeme.
      # @return [Inflect::InflectionTable]
      def paradigm
        paradigm_feat_def = self['PARADIGM']
        wclass.paradigms[paradigm_feat_def.default.val]
      end

      alias base_form lemma
    end # class
  end # module
end # module

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
zenlish-0.2.01 lib/zenlish/lex/lexeme.rb