Add first version of ruby bindings.
This commit is contained in:
parent
ae0158a1cd
commit
6368214fce
14 changed files with 508 additions and 0 deletions
65
src/bindings/ruby/lib/hammer.rb
Normal file
65
src/bindings/ruby/lib/hammer.rb
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
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!'
|
||||
Loading…
Add table
Add a link
Reference in a new issue