File: concrete-syntax/core/expression/binary/infix/abstraction.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Umu#6
  module: ConcreteSyntax#8
  module: Core#10
  module: Expression#12
  module: Binary#14
  module: Infix#16
  module: Abstraction#18
  class: Abstract#20
inherits from
  Abstract ( Umu::ConcreteSyntax::Core::Expression::Binary )
has properties
alias: lhs_opnd lhs #21
attribute: opr_sym [R] #22
alias: rhs_opnd rhs #23
method: initialize / 4 #26
method: to_s #37
method: pretty_print / 1 #46
  class: Simple#62
  class: WithRepetition#74
includes
  Enumerable ( Builtin-Module )
inherits from
  Abstract ( Umu::ConcreteSyntax::Core::Expression::Binary::Infix::Abstraction )
has properties
alias: hd_rhs_opnd rhs_opnd #77
attribute: tl_rhs_opnds [R] #78
method: initialize / 5 #81
method: each #93
method: to_s #108
method: pretty_print / 1 #115

Code

   1  # coding: utf-8
   2  # frozen_string_literal: true
   3 
   4 
   5 
   6  module Umu
   7 
   8  module ConcreteSyntax
   9 
  10  module Core
  11 
  12  module Expression
  13 
  14  module Binary
  15 
  16  module Infix
  17 
  18  module Abstraction
  19 
  20  class Abstract < Binary::Abstract
  21      alias       lhs_opnd lhs
  22      attr_reader :opr_sym
  23      alias       rhs_opnd rhs
  24 
  25 
  26      def initialize(loc, lhs_opnd, opr_sym, rhs_opnd)
  27          ASSERT.kind_of lhs_opnd,    Umu::Abstraction::Model
  28          ASSERT.kind_of opr_sym,     ::Symbol
  29          ASSERT.kind_of rhs_opnd,    Umu::Abstraction::Model
  30 
  31          super(loc, lhs_opnd, rhs_opnd)
  32 
  33          @opr_sym = opr_sym
  34      end
  35 
  36 
  37      def to_s
  38          format("(%s %s %s)",
  39              self.lhs_opnd.to_s,
  40              self.opr_sym.to_s,
  41              self.rhs_opnd.to_s
  42          )
  43      end
  44 
  45 
  46      def pretty_print(q)
  47          PRT.group q, bb:'(', eb:')' do
  48              q.pp self.lhs_opnd
  49 
  50              q.text ' '
  51              q.text self.opr_sym.to_s
  52 
  53              q.breakable
  54 
  55              q.pp self.rhs_opnd
  56          end
  57      end
  58  end
  59 
  60 
  61 
  62  class Simple < Abstract
  63      def initialize(loc, lhs_opnd, opr_sym, rhs_opnd)
  64          ASSERT.kind_of lhs_opnd,    CSCE::Abstract
  65          ASSERT.kind_of opr_sym,     ::Symbol
  66          ASSERT.kind_of rhs_opnd,    CSCE::Abstract
  67 
  68          super
  69      end
  70  end
  71 
  72 
  73 
  74  class WithRepetition < Abstract
  75      include Enumerable
  76 
  77      alias       hd_rhs_opnd rhs_opnd
  78      attr_reader :tl_rhs_opnds
  79 
  80 
  81      def initialize(loc, lhs_opnd, opr_sym, hd_rhs_opnd, tl_rhs_opnds)
  82          ASSERT.kind_of lhs_opnd,        CSCE::Abstract
  83          ASSERT.kind_of opr_sym,         ::Symbol
  84          ASSERT.kind_of hd_rhs_opnd,     CSCE::Abstract
  85          ASSERT.kind_of tl_rhs_opnds,    ::Array
  86 
  87          super(loc, lhs_opnd, opr_sym, hd_rhs_opnd)
  88 
  89          @tl_rhs_opnds = tl_rhs_opnds
  90      end
  91 
  92 
  93      def each
  94          return self.to_enum unless block_given?
  95 
  96          yield self.lhs_opnd
  97 
  98          yield self.hd_rhs_opnd
  99 
 100          self.tl_rhs_opnds.each do |rhs_opnd|
 101              ASSERT.kind_of rhs_opnd, CSCE::Abstract
 102 
 103              yield rhs_opnd
 104          end
 105      end
 106 
 107 
 108      def to_s
 109          opr = format " %s ", self.opr_sym.to_s
 110 
 111          format "(%s)", self.map(&:to_s).join(opr)
 112      end
 113 
 114 
 115      def pretty_print(q)
 116          hd_expr, *tl_exprs = self.to_a
 117 
 118          q.text '('
 119          q.pp hd_expr
 120 
 121          tl_exprs.each do |expr|
 122              q.breakable
 123 
 124              q.text self.opr_sym.to_s
 125              q.text ' '
 126              q.pp expr
 127          end
 128 
 129          q.text ')'
 130      end
 131  end
 132 
 133  end # Umu::ConcreteSyntax::Core::Expression::Binary::Infix::Abstraction
 134 
 135  end # Umu::ConcreteSyntax::Core::Expression::Binary::Infix
 136 
 137  end # Umu::ConcreteSyntax::Core::Expression::Binary
 138 
 139  end # Umu::ConcreteSyntax::Core::Expression
 140 
 141  end # Umu::ConcreteSyntax::Core
 142 
 143  end # Umu::ConcreteSyntax
 144 
 145  end # Umu