File: concrete-syntax/core/expression/nary/interval.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
has properties
function: make_interval / 4 #138
function: make_interval_stream / 4 #150
  module: Nary#14
  module: Interval#16
  class: Abstract#18
inherits from
  Abstract ( Umu::ConcreteSyntax::Core::Expression )
has properties
attribute: fst_expr [R] #19
attribute: opt_snd_expr [R] #19
attribute: opt_lst_expr [R] #19
method: initialize / 4 #22
method: to_s #35
method: __bb__ #58
method: __desugar__ / 2 #63
method: __make__ / 4 #86
  class: Basic#93
inherits from
  Abstract ( Umu::ConcreteSyntax::Core::Expression::Nary::Interval )
has properties
method: initialize / 4 #94
method: __bb__ #105
method: __make__ / 4 #110
  class: Stream#117
inherits from
  Abstract ( Umu::ConcreteSyntax::Core::Expression::Nary::Interval )
has properties
method: __bb__ #121
method: __make__ / 4 #126

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 Nary
  15 
  16  module Interval
  17 
  18  class Abstract < Expression::Abstract
  19      attr_reader :fst_expr, :opt_snd_expr, :opt_lst_expr
  20 
  21 
  22      def initialize(loc, fst_expr, opt_snd_expr, opt_lst_expr)
  23          ASSERT.kind_of     fst_expr,        CSCE::Abstract
  24          ASSERT.opt_kind_of opt_snd_expr,    CSCE::Abstract
  25          ASSERT.opt_kind_of opt_lst_expr,    CSCE::Abstract
  26 
  27          super(loc)
  28 
  29          @fst_expr     = fst_expr
  30          @opt_snd_expr = opt_snd_expr
  31          @opt_lst_expr = opt_lst_expr
  32      end
  33 
  34 
  35      def to_s
  36          format("%s%s%s .. %s]",
  37                   __bb__,
  38 
  39                   self.fst_expr.to_s,
  40 
  41                   if self.opt_snd_expr
  42                       format ", %s", self.opt_snd_expr.to_s
  43                   else
  44                       ''
  45                   end,
  46 
  47                   if self.opt_lst_expr
  48                       format " %s", self.opt_lst_expr.to_s
  49                   else
  50                       ''
  51                   end
  52          )
  53      end
  54 
  55 
  56  private
  57 
  58      def __bb__
  59          raise X::InternalSubclassResponsibility
  60      end
  61 
  62 
  63      def __desugar__(env, event)
  64          new_env = env.enter event
  65 
  66          __make__(
  67              self.loc,
  68 
  69              self.fst_expr.desugar(new_env),
  70 
  71              if self.opt_snd_expr
  72                  self.opt_snd_expr.desugar(new_env)
  73              else
  74                  nil
  75              end,
  76 
  77              if self.opt_lst_expr
  78                  self.opt_lst_expr.desugar(new_env)
  79              else
  80                  nil
  81              end
  82          )
  83      end
  84 
  85 
  86      def __make__(_loc, _fst_expr, _opt_snd_expr, _lst_expr)
  87          raise X::InternalSubclassResponsibility
  88      end
  89  end
  90 
  91 
  92 
  93  class Basic < Abstract
  94      def initialize(loc, fst_expr, opt_snd_expr, lst_expr)
  95          ASSERT.kind_of     fst_expr,        CSCE::Abstract
  96          ASSERT.opt_kind_of opt_snd_expr,    CSCE::Abstract
  97          ASSERT.kind_of     lst_expr,        CSCE::Abstract
  98 
  99          super
 100      end
 101 
 102 
 103  private
 104 
 105      def __bb__
 106          '['
 107      end
 108 
 109 
 110      def __make__(loc, fst_expr, opt_snd_expr, lst_expr)
 111          ASCE.make_interval loc, fst_expr, opt_snd_expr, lst_expr
 112      end
 113  end
 114 
 115 
 116 
 117  class Stream < Abstract
 118 
 119  private
 120 
 121      def __bb__
 122          '&['
 123      end
 124 
 125 
 126      def __make__(loc, fst_expr, opt_snd_expr, lst_expr)
 127          ASCE.make_interval_stream loc, fst_expr, opt_snd_expr, lst_expr
 128      end
 129  end
 130 
 131  end # Umu::ConcreteSyntax::Core::Expression::Nary::Interval
 132 
 133  end # Umu::ConcreteSyntax::Core::Expression::Nary
 134 
 135 
 136  module_function
 137 
 138      def make_interval(loc, fst_expr, opt_snd_expr, lst_expr)
 139          ASSERT.kind_of     loc,             LOC::Entry
 140          ASSERT.kind_of     fst_expr,        CSCE::Abstract
 141          ASSERT.opt_kind_of opt_snd_expr,    CSCE::Abstract
 142          ASSERT.kind_of     lst_expr,        CSCE::Abstract
 143 
 144          Nary::Interval::Basic.new(
 145              loc, fst_expr, opt_snd_expr, lst_expr
 146          ).freeze
 147      end
 148 
 149 
 150      def make_interval_stream(loc, fst_expr, opt_snd_expr, opt_lst_expr)
 151          ASSERT.kind_of     loc,             LOC::Entry
 152          ASSERT.kind_of     fst_expr,        CSCE::Abstract
 153          ASSERT.opt_kind_of opt_snd_expr,    CSCE::Abstract
 154          ASSERT.opt_kind_of opt_lst_expr,    CSCE::Abstract
 155 
 156          Nary::Interval::Stream.new(
 157              loc, fst_expr, opt_snd_expr, opt_lst_expr
 158          ).freeze
 159      end
 160 
 161  end # Umu::ConcreteSyntax::Core::Expression
 162 
 163  end # Umu::ConcreteSyntax::Core
 164 
 165  end # Umu::ConcreteSyntax
 166 
 167  end # Umu