File: lexical/lexer/abstract.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Umu#6
  module: Lexical#8
  module: Lexer#10
  class: Abstract#12
inherits from
  Record ( Umu::Abstraction )
has properties
attribute: loc [R] #13
attribute: braket_stack [R] #14
class method: deconstruct_keys #17
method: initialize / 2 #25
method: to_s #34
method: comment_depth #43
method: braket_depth #48
method: in_comment? #53
method: in_braket? #58
method: between_braket? #63
method: next_line_num / 1 #74
method: recover #81
method: lex / 1 #86
method: __make_separator__ / 2 #93
method: __make_comment__ / 5 #105
method: __make_token__ / 2 #123
method: __make_string__ / 3 #135
method: __make_symbolized_string__ / 3 #149

Class Hierarchy

Code

   1  # coding: utf-8
   2  # frozen_string_literal: true
   3 
   4 
   5 
   6  module Umu
   7 
   8  module Lexical
   9 
  10  module Lexer
  11 
  12  class Abstract < Abstraction::Record
  13      attr_reader :loc
  14      attr_reader :braket_stack
  15 
  16 
  17      def self.deconstruct_keys
  18          {
  19              :loc            => LOC::Entry,
  20              :braket_stack   => ::Array
  21          }
  22      end
  23 
  24 
  25      def initialize(loc, braket_stack)
  26          ASSERT.kind_of loc,             LOC::Entry
  27          ASSERT.kind_of braket_stack,    ::Array
  28 
  29          @loc            = loc
  30          @braket_stack   = braket_stack
  31      end
  32 
  33 
  34      def to_s
  35          format("%s {braket_stack=%s} -- %s",
  36              E::Tracer.class_to_string(self.class),
  37              self.braket_stack.inspect,
  38              self.loc.to_s
  39          )
  40      end
  41 
  42 
  43      def comment_depth
  44          0
  45      end
  46 
  47 
  48      def braket_depth
  49          self.braket_stack.length
  50      end
  51 
  52 
  53      def in_comment?
  54          false
  55      end
  56 
  57 
  58      def in_braket?
  59          not self.braket_stack.empty?
  60      end
  61 
  62 
  63      def between_braket?
  64          if self.in_comment?
  65              false
  66          elsif self.in_braket?
  67              false
  68          else
  69              true
  70          end
  71      end
  72 
  73 
  74      def next_line_num(n = 1)
  75          ASSERT.kind_of n, ::Integer
  76 
  77          self.update(loc: self.loc.next_line_num(n))
  78      end
  79 
  80 
  81      def recover
  82          __make_separator__ self.loc.next_line_num, []
  83      end
  84 
  85 
  86      def lex(scanner)
  87          raise X::InternalSubclassResponsibility
  88      end
  89 
  90 
  91  private
  92 
  93      def __make_separator__(
  94          loc             = self.loc,
  95          braket_stack    = self.braket_stack
  96      )
  97          ASSERT.kind_of loc, LOC::Entry
  98 
  99          Separator.new(
 100              loc, braket_stack.freeze
 101          ).freeze
 102      end
 103 
 104 
 105      def __make_comment__(
 106          saved_loc,
 107          comment_depth,
 108          buf,
 109          loc             = self.loc,
 110          braket_stack    = self.braket_stack
 111      )
 112          ASSERT.kind_of saved_loc,       LOC::Entry
 113          ASSERT.kind_of comment_depth,   ::Integer
 114          ASSERT.kind_of buf,             ::String
 115          ASSERT.kind_of loc,             LOC::Entry
 116 
 117          Comment.new(
 118              loc, braket_stack.freeze, buf.freeze, saved_loc, comment_depth
 119          ).freeze
 120      end
 121 
 122 
 123      def __make_token__(
 124          loc             = self.loc,
 125          braket_stack    = self.braket_stack
 126      )
 127          ASSERT.kind_of loc, LOC::Entry
 128 
 129          Token.new(
 130              loc, braket_stack.freeze
 131          ).freeze
 132      end
 133 
 134 
 135      def __make_string__(
 136          buf,
 137          loc             = self.loc,
 138          braket_stack    = self.braket_stack
 139      )
 140          ASSERT.kind_of buf, ::String
 141          ASSERT.kind_of loc, LOC::Entry
 142 
 143          String::Basic.new(
 144              loc, braket_stack.freeze, buf.freeze
 145          ).freeze
 146      end
 147 
 148 
 149      def __make_symbolized_string__(
 150          buf,
 151          loc             = self.loc,
 152          braket_stack    = self.braket_stack
 153      )
 154          ASSERT.kind_of buf, ::String
 155          ASSERT.kind_of loc, LOC::Entry
 156 
 157          String::Symbolized.new(
 158              loc, braket_stack.freeze, buf.freeze
 159          ).freeze
 160      end
 161  end
 162 
 163  end # Umu::Lexical::Lexer
 164 
 165  end # Umu::Lexical
 166 
 167  end # Umu