Sha256: 83bb994508bc6a70b264262d6c9404a9ac15b792031b259fe7f0b8819d58c909
Contents?: true
Size: 1.98 KB
Versions: 2
Compression:
Stored size: 1.98 KB
Contents
require File.dirname(__FILE__)/'..'/'lang'/'en'/'atn.rb' # TODO no "en" class ATN include English def initialize(language = :english, dialect = :US, allow_passive = true) if :english == language # @tree = [] else raise LanguageException("Unsupported language.") end end def parse(string) output = "" string.sentences.each do |sentence| @words = sentence.words output += root end return output end private # @deprecated def next_word unless @words.empty? @star = Word.new(@words.shift) else raise FragmentException.new("Fragment (consider revising)") end end def tag(marker, word) marker + word.quote.bracket('(') end def tag_phrase(marker, phrase) marker + phrase.bracket('(') end # The following methods probably aren't the most efficient way of doing things (passing around # blocks in particular). However, it makes the implementation simpler. def optional(part_of_speech, &block) begin return required(part_of_speech, &block) rescue UngrammaticalException # Ignore it--this is optional return "" end end def required(part_of_speech, &block) if part_of_speech == @star.part_of_speech return (yield @star) else raise UngrammaticalException.new("Missing #{part_of_speech.to_s.downcase}: received #{@star.quote}") end end def optional_phrase(&block) begin return required_phrase(&block) rescue UngrammaticalException # Ignore it--this is optional return "" end end def required_phrase(&block) if not @words.empty? return yield else raise UngrammaticalException.new("Incomplete phrase") end end end class UngrammaticalException < Exception; end class FragmentException < UngrammaticalException; end class PassiveException < UngrammaticalException; end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
odin-0.0.4 | lib/atn.rb |
odin-0.1.0.alpha.1 | lib/atn.rb |