Sha256: b90d636af0df88d43fbb28c627bfd9ba26ab8cd767273c25aca502c363b46750
Contents?: true
Size: 1.08 KB
Versions: 3
Compression:
Stored size: 1.08 KB
Contents
module Sexpr module Parser class << self def registered_parser_classes @registered_parser_classes ||= [] end def register(parser_class) registered_parser_classes << parser_class end def find_parser_class(external_parser) registered_parser_classes.find{|cl| cl.recognizes?(external_parser) } end def factor(external_parser) return external_parser if Parser===external_parser if cl = find_parser_class(external_parser) cl.new(external_parser) else raise UnrecognizedParserError, "Parser not recognized: #{external_parser}" end end end # class methods private def input_text(input) case input when lambda{|x| x.respond_to?(:to_path)} input_text File.read(input.to_path) when IO input_text input.read when String input else raise InvalidParseSourceError, "Invalid parse source: #{input}" end end end # module Parser end # module Sexpr require_relative "parser/citrus"
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
sexpr-0.5.1 | lib/sexpr/parser.rb |
sexpr-0.5.0 | lib/sexpr/parser.rb |
sexpr-0.4.0 | lib/sexpr/parser.rb |