### Home Classes Methods

### In Files

- lib/sass/script/parser.rb

### Parent

Object

### Methods

- ::associative?
- ::new
- ::parse
- ::precedence_of
- #line
- #parse
- #parse_function_definition_arglist
- #parse_interpolated
- #parse_mixin_definition_arglist
- #parse_mixin_include_arglist
- #parse_string
- #parse_until

### Class/Module Index

Quicksearch

- Sass
- Sass::CSS
- Sass::CacheStores
- Sass::CacheStores::Base
- Sass::CacheStores::Chain
- Sass::CacheStores::Filesystem
- Sass::CacheStores::Memory
- Sass::CacheStores::Null
- Sass::Callbacks
- Sass::Callbacks::InstanceMethods
- Sass::Engine
- Sass::Engine::Line
- Sass::Environment
- Sass::Exec
- Sass::Exec::Generic
- Sass::Exec::Sass
- Sass::Exec::SassConvert
- Sass::Exec::Scss
- Sass::Importers
- Sass::Importers::Base
- Sass::Importers::Filesystem
- Sass::Logger
- Sass::Logger::Base
- Sass::Logger::LogLevel
- Sass::Logger::LogLevel::ClassMethods
- Sass::Media
- Sass::Media::Query
- Sass::Media::QueryList
- Sass::Plugin
- Sass::Plugin::Compiler
- Sass::Plugin::Configuration
- Sass::Plugin::MerbBootLoader
- Sass::Plugin::Rack
- Sass::Plugin::StalenessChecker
- Sass::Repl
- Sass::SCSS
- Sass::SCSS::CssParser
- Sass::SCSS::Parser
- Sass::SCSS::RX
- Sass::SCSS::ScriptLexer
- Sass::SCSS::ScriptParser
- Sass::SCSS::StaticParser
- Sass::Script
- Sass::Script::ArgList
- Sass::Script::Bool
- Sass::Script::Color
- Sass::Script::CssLexer
- Sass::Script::CssParser
- Sass::Script::Funcall
- Sass::Script::Functions
- Sass::Script::Functions::EvaluationContext
- Sass::Script::Interpolation
- Sass::Script::Lexer
- Sass::Script::List
- Sass::Script::Literal
- Sass::Script::Node
- Sass::Script::Null
- Sass::Script::Number
- Sass::Script::Operation
- Sass::Script::Parser
- Sass::Script::String
- Sass::Script::StringInterpolation
- Sass::Script::UnaryOperation
- Sass::Script::Variable
- Sass::Selector
- Sass::Selector::AbstractSequence
- Sass::Selector::Attribute
- Sass::Selector::Class
- Sass::Selector::CommaSequence
- Sass::Selector::Element
- Sass::Selector::Id
- Sass::Selector::Interpolation
- Sass::Selector::Parent
- Sass::Selector::Placeholder
- Sass::Selector::Pseudo
- Sass::Selector::SelectorPseudoClass
- Sass::Selector::Sequence
- Sass::Selector::Simple
- Sass::Selector::SimpleSequence
- Sass::Selector::Universal
- Sass::Shared
- Sass::Supports
- Sass::Supports::Condition
- Sass::Supports::Declaration
- Sass::Supports::Interpolation
- Sass::Supports::Negation
- Sass::Supports::Operator
- Sass::SyntaxError
- Sass::Tree
- Sass::Tree::CharsetNode
- Sass::Tree::CommentNode
- Sass::Tree::ContentNode
- Sass::Tree::CssImportNode
- Sass::Tree::DebugNode
- Sass::Tree::DirectiveNode
- Sass::Tree::EachNode
- Sass::Tree::ExtendNode
- Sass::Tree::ForNode
- Sass::Tree::FunctionNode
- Sass::Tree::IfNode
- Sass::Tree::ImportNode
- Sass::Tree::MediaNode
- Sass::Tree::MixinDefNode
- Sass::Tree::MixinNode
- Sass::Tree::Node
- Sass::Tree::PropNode
- Sass::Tree::ReturnNode
- Sass::Tree::RootNode
- Sass::Tree::RuleNode
- Sass::Tree::SupportsNode
- Sass::Tree::TraceNode
- Sass::Tree::VariableNode
- Sass::Tree::Visitors
- Sass::Tree::Visitors::Base
- Sass::Tree::Visitors::CheckNesting
- Sass::Tree::Visitors::Convert
- Sass::Tree::Visitors::Cssize
- Sass::Tree::Visitors::DeepCopy
- Sass::Tree::Visitors::Extend
- Sass::Tree::Visitors::Perform
- Sass::Tree::Visitors::SetOptions
- Sass::Tree::Visitors::ToCss
- Sass::Tree::WarnNode
- Sass::Tree::WhileNode
- Sass::UnitConversionError
- Sass::Util
- Sass::Util::MultibyteStringScanner
- Sass::Util::StaticConditionalContext
- Sass::Util::SubsetMap
- Sass::Util::Test
- Sass::Version
- ActionController
- ActionController::Base
- Object

No matching classes.

# Sass::Script::Parser

The parser for SassScript. It parses a string of code into a tree of {Script::Node}s.

### Constants

ASSOCIATIVE
EXPR_NAMES

  It would be possible to have unified assert and try methods, but detecting the method/token difference turns out to be quite expensive.

PRECEDENCE

### Public Class Methods

associative?(op) click to toggle source

Returns whether or not the given operation is associative.

@private

    # File lib/sass/script/parser.rb, line 195
    def associative?(op)
      ASSOCIATIVE.include?(op)
    end

new(str, line, offset, options = {}) click to toggle source

@param str [String, StringScanner] The source text to parse @param line [Fixnum] The line on which the SassScript appears.

    Used for error reporting

@param offset [Fixnum] The number of characters in on which the SassScript appears.

    Used for error reporting

@param options [{Symbol => Object}] An options hash;

    see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}

    # File lib/sass/script/parser.rb, line 22
    def initialize(str, line, offset, options = {})
      @options = options
      @lexer = lexer_class.new(str, line, offset, options)
    end

parse(*args) click to toggle source

Parses a SassScript expression.

@overload parse(str, line, offset, filename = nil) @return [Script::Node] The root node of the parse tree @see Parser#initialize @see Parser#parse

    # File lib/sass/script/parser.rb, line 165
    def self.parse(*args)
      new(*args).parse
    end

precedence_of(op) click to toggle source

Returns an integer representing the precedence of the given operator. A lower integer indicates a looser binding.

@private

    # File lib/sass/script/parser.rb, line 185
    def precedence_of(op)
      PRECEDENCE.each_with_index do |e, i|
        return i if Array(e).include?(op)
      end
      raise "[BUG] Unknown operator #{op}"
    end

### Public Instance Methods

line() click to toggle source

The line number of the parser's current position.

@return [Fixnum]

    # File lib/sass/script/parser.rb, line 11
    def line
      @lexer.line
    end

parse() click to toggle source

Parses a SassScript expression.

@return [Script::Node] The root node of the parse tree @raise [Sass::SyntaxError] if the expression isn't valid SassScript

    # File lib/sass/script/parser.rb, line 48
    def parse
      expr = assert_expr :expr
      assert_done
      expr.options = @options
      expr
    rescue Sass::SyntaxError => e
      e.modify_backtrace :line => @lexer.line, :filename => @options[:filename]
      raise e
    end

parse_function_definition_arglist() click to toggle source

Parses the argument list for a function definition.

@return [(Array<Script::Node>, Script::Node)]

    The root nodes of the arguments, and the splat argument.

@raise [Sass::SyntaxError] if the argument list isn't valid SassScript

    # File lib/sass/script/parser.rb, line 123
    def parse_function_definition_arglist
      args, splat = defn_arglist!(true)
      assert_done

      args.each do |k, v|
        k.options = @options
        v.options = @options if v
      end
      splat.options = @options if splat
      return args, splat
    rescue Sass::SyntaxError => e
      e.modify_backtrace :line => @lexer.line, :filename => @options[:filename]
      raise e
    end

parse_interpolated() click to toggle source

Parses a SassScript expression within an interpolated segment (`#{}`). This means that it stops when it comes across an unmatched `}`, which signals the end of an interpolated segment, it returns rather than throwing an error.

@return [Script::Node] The root node of the parse tree @raise [Sass::SyntaxError] if the expression isn't valid SassScript

    # File lib/sass/script/parser.rb, line 34
    def parse_interpolated
      expr = assert_expr :expr
      assert_tok :end_interpolation
      expr.options = @options
      expr
    rescue Sass::SyntaxError => e
      e.modify_backtrace :line => @lexer.line, :filename => @options[:filename]
      raise e
    end

parse_mixin_definition_arglist() click to toggle source

Parses the argument list for a mixin definition.

@return [(Array<Script::Node>, Script::Node)]

    The root nodes of the arguments, and the splat argument.

@raise [Sass::SyntaxError] if the argument list isn't valid SassScript

    # File lib/sass/script/parser.rb, line 103
    def parse_mixin_definition_arglist
      args, splat = defn_arglist!(false)
      assert_done

      args.each do |k, v|
        k.options = @options
        v.options = @options if v
      end
      splat.options = @options if splat
      return args, splat
    rescue Sass::SyntaxError => e
      e.modify_backtrace :line => @lexer.line, :filename => @options[:filename]
      raise e
    end

parse_mixin_include_arglist() click to toggle source

Parses the argument list for a mixin include.

@return [(Array<Script::Node>, {String => Script::Node}, Script::Node)]

    The root nodes of the positional arguments, keyword arguments, and
    splat argument. Keyword arguments are in a hash from names to values.

@raise [Sass::SyntaxError] if the argument list isn't valid SassScript

    # File lib/sass/script/parser.rb, line 81
    def parse_mixin_include_arglist
      args, keywords = [], {}
      if try_tok(:lparen)
        args, keywords, splat = mixin_arglist || [[], {}]
        assert_tok(:rparen)
      end
      assert_done

      args.each {|a| a.options = @options}
      keywords.each {|k, v| v.options = @options}
      splat.options = @options if splat
      return args, keywords, splat
    rescue Sass::SyntaxError => e
      e.modify_backtrace :line => @lexer.line, :filename => @options[:filename]
      raise e
    end

parse_string() click to toggle source

Parse a single string value, possibly containing interpolation. Doesn't assert that the scanner is finished after parsing.

@return [Script::Node] The root node of the parse tree. @raise [Sass::SyntaxError] if the string isn't valid SassScript

    # File lib/sass/script/parser.rb, line 143
    def parse_string
      unless (peek = @lexer.peek) &&
          (peek.type == :string ||
          (peek.type == :funcall && peek.value.downcase == 'url'))
        lexer.expected!("string")
      end

      expr = assert_expr :funcall
      expr.options = @options
      @lexer.unpeek!
      expr
    rescue Sass::SyntaxError => e
      e.modify_backtrace :line => @lexer.line, :filename => @options[:filename]
      raise e
    end

parse_until(tokens) click to toggle source

Parses a SassScript expression, ending it when it encounters one of the given identifier tokens.

@param [include?(String)] A set of strings that delimit the expression. @return [Script::Node] The root node of the parse tree @raise [Sass::SyntaxError] if the expression isn't valid SassScript

    # File lib/sass/script/parser.rb, line 64
    def parse_until(tokens)
      @stop_at = tokens
      expr = assert_expr :expr
      assert_done
      expr.options = @options
      expr
    rescue Sass::SyntaxError => e
      e.modify_backtrace :line => @lexer.line, :filename => @options[:filename]
      raise e
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.