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
44 45 46 |
# File 'lib/junoser/parser.rb', line 44 def a(object, arg, *children) b(object.as(:statement) >> space >> arg.as(:argument), *children) end |
#b(object, *children) ⇒ Object
block with children maybe
39 40 41 |
# File 'lib/junoser/parser.rb', line 39 def b(object, *children) children.inject(object) {|rule, child| rule.as(:label) >> (space >> child.as(:child) | eos) } end |
#c(*objects) ⇒ Object
choice
49 50 51 |
# File 'lib/junoser/parser.rb', line 49 def c(*objects) objects.inject {|rule, object| rule | object } end |
#ca(*objects) ⇒ Object
53 54 55 |
# File 'lib/junoser/parser.rb', line 53 def ca(*objects) objects.inject {|rule, object| rule | object } | arg end |
#enum(object) ⇒ Object
72 73 74 |
# File 'lib/junoser/parser.rb', line 72 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 36 |
# 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 # .xsd doesn't include "apply-groups" if line =~ /(.*)\s+apply-groups(-except)?\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
58 59 60 61 |
# File 'lib/junoser/parser.rb', line 58 def s(*objects) # TODO: eval "minOccurs" attribute of choice element objects.inject {|rule, object| rule >> (space >> object).maybe } end |
#sc(*objects) ⇒ Object
sequential choice
64 65 66 |
# File 'lib/junoser/parser.rb', line 64 def sc(*objects) (c(*objects) >> space.maybe).repeat(0) end |
#sca(*objects) ⇒ Object
68 69 70 |
# File 'lib/junoser/parser.rb', line 68 def sca(*objects) (c(*objects, arg) >> space.maybe).repeat(0) end |