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
- #enum(object) ⇒ Object
- #parse_line(line, lines_without_deactivate) ⇒ 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
43 44 45 |
# File 'lib/junoser/parser.rb', line 43 def a(object, arg, *children) b(object.as(:statement) >> space >> arg.as(:argument), *children) end |
#b(object, *children) ⇒ Object
block with children maybe
38 39 40 |
# File 'lib/junoser/parser.rb', line 38 def b(object, *children) children.inject(object) {|rule, child| rule.as(:label) >> (space >> child.as(:child) | eos) } end |
#c(*objects) ⇒ Object
choice
48 49 50 |
# File 'lib/junoser/parser.rb', line 48 def c(*objects) objects.inject {|rule, object| rule | object } end |
#ca(*objects) ⇒ Object
52 53 54 |
# File 'lib/junoser/parser.rb', line 52 def ca(*objects) objects.inject {|rule, object| rule | object } | arg end |
#enum(object) ⇒ Object
71 72 73 |
# File 'lib/junoser/parser.rb', line 71 def enum(object) (object.as(:enum)) end |
#parse_line(line, lines_without_deactivate) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/junoser/parser.rb', line 14 def parse_line(line, lines_without_deactivate) if line =~ /^deactivate/ if lines_without_deactivate.grep(/^#{line.sub(/^deactivate/, 'set')}/).empty? $stderr.puts %(Corresponding "set" statement is not found: #{line}) return false else return true end end begin if line =~ /(.*)\s+apply-groups\s+\S+$/ return $1 == 'set' ? true : parse($1) end parse line true rescue Parslet::ParseFailed $stderr.puts "Invalid syntax: #{line}" false end end |
#parse_lines(config) ⇒ Object
5 6 7 8 9 10 11 12 |
# File 'lib/junoser/parser.rb', line 5 def parse_lines(config) lines = config.split("\n").map(&:strip) lines_without_deactivate = lines.reject {|l| l =~ /^deactivate/ } lines.inject(true) do |passed, line| passed & parse_line(line, lines_without_deactivate) end end |
#s(*objects) ⇒ Object
sequence
57 58 59 60 |
# File 'lib/junoser/parser.rb', line 57 def s(*objects) # TODO: eval "minOccurs" attribute of choice element objects.inject {|rule, object| rule >> (space >> object).maybe } end |
#sc(*objects) ⇒ Object
sequential choice
63 64 65 |
# File 'lib/junoser/parser.rb', line 63 def sc(*objects) (c(*objects) >> space.maybe).repeat(0) end |
#sca(*objects) ⇒ Object
67 68 69 |
# File 'lib/junoser/parser.rb', line 67 def sca(*objects) (c(*objects, arg) >> space.maybe).repeat(0) end |