Class: Junoser::Parser

Inherits:
Parslet::Parser
  • Object
show all
Defined in:
lib/junoser/parser.rb

Instance Method Summary collapse

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