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



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