Class: Junoser::Parser
- Inherits:
-
Parslet::Parser
- Object
- Parslet::Parser
- Junoser::Parser
- Defined in:
- lib/junoser/parser.rb
Instance Method Summary collapse
-
#a(object, arg, *children) ⇒ Object
with an argument, and children maybe.
-
#b(object, *children) ⇒ Object
block with children maybe.
-
#c(*objects) ⇒ Object
choice.
- #ca(*objects) ⇒ Object
- #parse_lines(config) ⇒ Object
-
#s(*objects) ⇒ Object
sequence.
-
#sc(*objects) ⇒ Object
sequential choice.
- #sca(*objects) ⇒ Object
Instance Method Details
#a(object, arg, *children) ⇒ Object
with an argument, and children maybe
34 35 36 |
# File 'lib/junoser/parser.rb', line 34 def a(object, arg, *children) b(object.as(:statement) >> space >> arg.as(:argument), *children) end |
#b(object, *children) ⇒ Object
block with children maybe
29 30 31 |
# File 'lib/junoser/parser.rb', line 29 def b(object, *children) children.inject(object) {|rule, child| rule.as(:label) >> (space >> child.as(:child) | eos) } end |
#c(*objects) ⇒ Object
choice
39 40 41 |
# File 'lib/junoser/parser.rb', line 39 def c(*objects) objects.inject {|rule, object| rule | object } end |
#ca(*objects) ⇒ Object
43 44 45 |
# File 'lib/junoser/parser.rb', line 43 def ca(*objects) objects.inject {|rule, object| rule | object } | arg end |
#parse_lines(config) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/junoser/parser.rb', line 5 def parse_lines(config) lines = config.split("\n") lines_without_deactivate = lines.reject {|l| l =~ /^deactivate/ } lines.inject(true) do |passed, line| if line =~ /^deactivate/ if lines_without_deactivate.grep(/^#{line.sub(/^deactivate/, 'set')}/).empty? next false else next passed end end begin parse line passed rescue Parslet::ParseFailed $stderr.puts "Invalid syntax: #{line}" false end end end |
#s(*objects) ⇒ Object
sequence
48 49 50 51 |
# File 'lib/junoser/parser.rb', line 48 def s(*objects) # TODO: eval "minOccurs" attribute of choice element objects.inject {|rule, object| rule >> (space >> object).maybe } end |
#sc(*objects) ⇒ Object
sequential choice
54 55 56 |
# File 'lib/junoser/parser.rb', line 54 def sc(*objects) (c(*objects) >> space.maybe).repeat(0) end |
#sca(*objects) ⇒ Object
58 59 60 |
# File 'lib/junoser/parser.rb', line 58 def sca(*objects) (c(*objects, arg) >> space.maybe).repeat(0) end |