2013-11-10 15:13:15 +01:00
|
|
|
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.build {
|
|
|
|
|
token 'Hello '
|
|
|
|
|
choice {
|
|
|
|
|
token 'Mom'
|
|
|
|
|
token 'Dad'
|
|
|
|
|
}
|
|
|
|
|
token '!'
|
|
|
|
|
}
|
|
|
|
|
p parser.parse 'Hello Mom!'
|
|
|
|
|
|
|
|
|
|
parser = Hammer::ParserBuilder.new
|
|
|
|
|
.token('Hello ')
|
2013-11-15 14:21:20 +01:00
|
|
|
.choice(Hammer::Parser.token('Mom'), Hammer::Parser.token('Dad'))
|
2013-11-10 15:13:15 +01:00
|
|
|
.token('!')
|
|
|
|
|
.build
|
|
|
|
|
p parser.parse 'Hello Mom!'
|
|
|
|
|
|
2013-11-15 14:21:20 +01:00
|
|
|
h = Hammer::Parser
|
|
|
|
|
parser = h.sequence(h.token('Hello '), h.choice(h.token('Mom'), h.token('Dad')), h.token('!'))
|
|
|
|
|
p parser.parse 'Hello Mom!'
|
2013-11-15 14:49:18 +01:00
|
|
|
|
|
|
|
|
s = 'blah'
|
|
|
|
|
parser = h.token(s)
|
|
|
|
|
p parser.parse 'BLAH' # => false
|
|
|
|
|
s.upcase!
|
|
|
|
|
p parser.parse 'BLAH' # => false
|