Sha256: 565ae61a7ed7b320c12f266ac822485a64963ae931deb972dcfc1b4115be99bc
Contents?: true
Size: 1.96 KB
Versions: 3
Compression:
Stored size: 1.96 KB
Contents
# encoding: utf-8 require "set" module Antelope module Ace class Grammar # Manages precedence for tokens. module Precedences # Accesses the generated precedence list. Lazily generates # the precedence rules on the go, and then caches it. # # @return [Array<Ace::Precedence>] def precedence @_precedence ||= generate_precedence end # Finds a precedence rule for a given token. If no direct # rule is defined for that token, it will check for a rule # defined for the special symbol, `:_`. By default, there # is always a rule defined for `:_`. # # @param token [Ace::Token, Symbol] # @return [Ace::Precedence] def precedence_for(token) token = token.name if token.is_a?(Token) prec = precedence. detect { |pr| pr.tokens.include?(token) } || precedence. detect { |pr| pr.tokens.include?(:_) } prec end private # Generates the precedence rules. Loops through the compiler # given precedence settings, and then adds two default # precedence rules; one for `:$` (level 0, nonassoc), and one # for `:_` (level 1, nonassoc). # # @return [Array<Ace::Precedence>] def generate_precedence size = @compiler.options[:prec].size + 1 index = 0 precedence = [] while index < size - 1 prec = @compiler.options[:prec][index] precedence << Ace::Precedence.new(prec[0], prec[1..-1].to_set, size - index) index += 1 end precedence << Ace::Precedence.new(:nonassoc, [:$end].to_set, 0) << Ace::Precedence.new(:nonassoc, [:_].to_set, 1) precedence.sort_by(&:level).reverse end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
antelope-0.2.4 | lib/antelope/ace/grammar/precedences.rb |
antelope-0.2.3 | lib/antelope/ace/grammar/precedences.rb |
antelope-0.2.2 | lib/antelope/ace/grammar/precedences.rb |