Sha256: 9682ac3672b268bfcfbd81788bdace4e28807775cd8915dddc99b85e3ea9680f

Contents?: true

Size: 1012 Bytes

Versions: 6

Compression:

Stored size: 1012 Bytes

Contents

class Code
  class Parser
    class If < Parslet::Parser
      rule(:if_modifier) { ::Code::Parser::IfModifier.new }
      rule(:code) { ::Code::Parser::Code.new }

      rule(:if_keyword) { str("if") }
      rule(:else_keyword) { str("else") }
      rule(:unless_keyword) { str("unless") }
      rule(:end_keyword) { str("end") }

      rule(:space) { str(" ") }
      rule(:newline) { str("\n") }
      rule(:whitespace) { (space | newline).repeat(1) }

      rule(:if_rule) do
        (
          (if_keyword | unless_keyword).as(:if_operator) >> whitespace >>
            if_modifier.as(:if_statement) >> code.as(:if_body) >>
            (
              else_keyword >>
                (
                  whitespace >> (if_keyword | unless_keyword).as(:operator) >>
                    whitespace >> if_modifier.as(:statement)
                ).maybe >> code.as(:body)
            ).repeat(1).as(:elses).maybe >> end_keyword
        ).as(:if) | if_modifier
      end

      root(:if_rule)
    end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
code-ruby-0.2.4 lib/code/parser/if.rb
template-ruby-0.2.4 lib/code/parser/if.rb
template-ruby-0.2.3 lib/code/parser/if.rb
template-ruby-0.2.2 lib/code/parser/if.rb
template-ruby-0.2.1 lib/code/parser/if.rb
template-ruby-0.2.0 lib/code/parser/if.rb