Sha256: 934ae23a31df31751696172caa6fa810dcc581a081826f04451f7d9de8151e7c

Contents?: true

Size: 910 Bytes

Versions: 3

Compression:

Stored size: 910 Bytes

Contents

require "forwardable"

module Lrama
  class Grammar
    class Code < Struct.new(:type, :token_code, keyword_init: true)
      extend Forwardable

      def_delegators "token_code", :s_value, :line, :column, :references

      # $$, $n, @$, @n are translated to C code
      def translated_code
        t_code = s_value.dup

        references.reverse.each do |ref|
          first_column = ref.first_column
          last_column = ref.last_column

          str = reference_to_c(ref)

          t_code[first_column..last_column] = str
        end

        return t_code
      end

      private

      def reference_to_c(ref)
        raise NotImplementedError.new("#reference_to_c is not implemented")
      end
    end
  end
end

require "lrama/grammar/code/initial_action_code"
require "lrama/grammar/code/no_reference_code"
require "lrama/grammar/code/printer_code"
require "lrama/grammar/code/rule_action"

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lrama-0.5.12 lib/lrama/grammar/code.rb
lrama-0.5.11 lib/lrama/grammar/code.rb
lrama-0.5.10 lib/lrama/grammar/code.rb