You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
samples/packages/sass/src/parse
domesticmouse 3300a647bf
deploy: 2f370275ad
2 years ago
..
README.md deploy: 2f370275ad 2 years ago

README.md

Sass Parser

This directory contains various parsers used by Sass. The two most relevant classes are:

  • Parser: The base class of all other parsers, which includes basic infrastructure, utilities, and methods for parsing common CSS constructs that appear across multiple different specific parsers.

  • StylesheetParser: The base class specifically for the initial stylesheet parse. Almost all of the logic for parsing Sass files, both statement- and expression-level, lives here. Only places where individual syntaxes differ from one another are left abstract or overridden by subclasses.

All Sass parsing is done by hand using the string_scanner package, which we use to read the source code-unit-by-code-unit while also tracking source span information which we can then use to report errors and generate source maps. We don't use any kind of parser generator, partly because Sass's grammar requires arbitrary backtracking in various places and partly because handwritten code is often easier to read and debug.

The parser is simple recursive descent. There's usually a method for each logical production that either consumes text and returns its corresponding AST node or throws an exception; in some cases, a method (conventionally beginning with try) will instead consume text and return a node if it matches and return null without consuming anything if it doesn't.