require 'hammer/hammer_ext' require 'hammer/internal' require 'hammer/parser' require 'hammer/parser_builder' # TODO: # Probably need to rename this file to 'hammer-parser.rb', so # people can use "require 'hammer-parser'" in their code. # TODO: Put tests in test/ directory. parser = Hammer::Parser.build do token 'blah' ch 'a' choice { sequence { token 'abc' } token 'def' } end p parser if parser p parser.parse 'blahaabcd' p parser.parse 'blahadefd' p parser.parse 'blahablad' p parser.parse 'blaha' p parser.parse 'blah' end parser = Hammer::Parser::Sequence.new( Hammer::Parser::Token.new('Hello '), Hammer::Parser::Choice.new( Hammer::Parser::Token.new('Mom'), Hammer::Parser::Token.new('Dad') ), Hammer::Parser::Token.new('!') ) p parser.parse 'Hello Mom!' parser = Hammer::Parser.build { token 'Hello ' choice { token 'Mom' token 'Dad' } token '!' } p parser.parse 'Hello Mom!' parser = Hammer::ParserBuilder.new .token('Hello ') .choice(Hammer::Parser::Token.new('Mom'), Hammer::Parser::Token.new('Dad')) .token('!') .build p parser.parse 'Hello Mom!' # not yet working #h = Hammer::Parser #parser = h.sequence(h.token('Hello'), h.choice(h.token('Mom'), h.token('Dad')), h.token('!')) #p parser.parse 'Hello Mom!'