Sha256: c4fea9fc29459b8f443a1b687d9ab273c2ea6b0b8693bd0f94b7b69bdc5061ff

Contents?: true

Size: 842 Bytes

Versions: 6

Compression:

Stored size: 842 Bytes

Contents

module Lrama
  class Grammar
    class Rule < Struct.new(:id, :lhs, :rhs, :code, :nullable, :precedence_sym, :lineno, keyword_init: true)
      # TODO: Change this to display_name
      def to_s
        l = lhs.id.s_value
        r = rhs.empty? ? "ε" : rhs.map {|r| r.id.s_value }.join(", ")

        "#{l} -> #{r}"
      end

      # Used by #user_actions
      def as_comment
        l = lhs.id.s_value
        r = rhs.empty? ? "%empty" : rhs.map(&:display_name).join(" ")

        "#{l}: #{r}"
      end

      # opt_nl: ε     <-- empty_rule
      #       | '\n'  <-- not empty_rule
      def empty_rule?
        rhs.empty?
      end

      def precedence
        precedence_sym&.precedence
      end

      def initial_rule?
        id == 0
      end

      def translated_code
        code&.translated_code
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
lrama-0.5.9 lib/lrama/grammar/rule.rb
lrama-0.5.8 lib/lrama/grammar/rule.rb
lrama-0.5.7 lib/lrama/grammar/rule.rb
lrama-0.5.6 lib/lrama/grammar/rule.rb
lrama-0.5.5 lib/lrama/grammar/rule.rb
lrama-0.5.4 lib/lrama/grammar/rule.rb