Sha256: 48436c69389250eb24cf5850578e5d1dd639f820638c3feff744a617ec126816

Contents?: true

Size: 1.66 KB

Versions: 32

Compression:

Stored size: 1.66 KB

Contents

require_relative 'grm_symbol' # Load superclass

module Rley # This module is used as a namespace
  module Syntax # This module is used as a namespace
    # A non-terminal symbol (sometimes called a syntactic variable) represents
    # a composition of terminal or non-terminal symbols
    class NonTerminal < GrmSymbol
      # A non-terminal symbol is nullable if it can match an empty string.
      attr_writer(:nullable)
      
      # A non-terminal symbol is undefined if no production rule in the grammar
      # has that non-terminal symbol in its left-hand side.
      attr_writer(:undefined)
      
      # A non-terminal symbol is unreachable if it cannot be reached (derived) 
      # from the start symbol.
      attr_writer(:unreachable)

      # Constructor.
      # @param aName [String] The name of the grammar symbol.
      def initialize(aName)
        super(aName)
      end

      # @return [false/true] Return true if the symbol derives
      # the empty string. As non-terminal symbol is nullable when it can
      # can match to zero input token.
      # The "nullability" of a non-terminal can practically be determined once
      # all the production rules of the grammar are specified.
      def nullable?()
        return @nullable
      end
      
      # @return [false/true] Return true if the symbol doesn't appear
      # on the left-hand side of any production rule.
      def undefined?()
        return @undefined
      end
      
      # @return [false/true] Return true if the symbol cannot be derived
      # from the start symbol.
      def unreachable?()
        return @unreachable
      end      
    end # class
  end # module
end # module
# End of file

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
rley-0.7.03 lib/rley/syntax/non_terminal.rb
rley-0.7.02 lib/rley/syntax/non_terminal.rb
rley-0.7.01 lib/rley/syntax/non_terminal.rb
rley-0.7.00 lib/rley/syntax/non_terminal.rb
rley-0.6.09 lib/rley/syntax/non_terminal.rb
rley-0.6.08 lib/rley/syntax/non_terminal.rb
rley-0.6.07 lib/rley/syntax/non_terminal.rb
rley-0.6.06 lib/rley/syntax/non_terminal.rb
rley-0.6.05 lib/rley/syntax/non_terminal.rb
rley-0.6.04 lib/rley/syntax/non_terminal.rb
rley-0.6.03 lib/rley/syntax/non_terminal.rb
rley-0.6.02 lib/rley/syntax/non_terminal.rb
rley-0.6.01 lib/rley/syntax/non_terminal.rb
rley-0.6.00 lib/rley/syntax/non_terminal.rb
rley-0.5.14 lib/rley/syntax/non_terminal.rb
rley-0.5.13 lib/rley/syntax/non_terminal.rb
rley-0.5.12 lib/rley/syntax/non_terminal.rb
rley-0.5.11 lib/rley/syntax/non_terminal.rb
rley-0.5.10 lib/rley/syntax/non_terminal.rb
rley-0.5.09 lib/rley/syntax/non_terminal.rb