Sdf Language

SDF: Modular Syntax Definition Formalism


The SDF syntax definition formalism allows a concise and natural expression of the syntax of a context-free language. SDF integrates lexical and context-free syntax in a single syntax formalism. The complete syntax of a language is thus defined in a single definition. SDF supports arbitrary context-free grammars. Therefore, SDF does not restrict the grammars to a subclass of the context-free grammars, such as LL or LALR. SDF syntax definitions can be modular. SDF modules can be reused in different syntax definitions. Disambiguation of grammars is not done by grammar hacking, but by applying special purpose disambiguation facilities in SDF, such as priorities, reject productions, and follow restrictions.

SDF is a declarative language. This means that a syntax definition can be used for different purposes then the usual application: the generation of a parser. Instead, SDF syntax definitions can be used to generate other tools from syntax definitions, e.g. pretty-printers and data type definitions.

Language Features

  • Modules
  • Integration of lexical and context-free syntax
  • Character classes
  • Regular expressions
  • Disambiguation by relative priorities
  • Disambiguation by associativity
  • Disambiguation by preference
  • Aliases
  • Renaming and parameterization of modules
  • Lookahead restrictions
  • Reject productions
  • Case-insensitive keywords

Design Features

Implementers of SDF2 will appreciate its orthogonality. Language features are defined, as much as possible, orthogonal with respect to each other. Despite providing a rich formalism at the level of the user language, the implementation only has to work on a small kernel formalism to which syntax definitions are transformed. Most features are expressed by a translation to the kernel formalism, which is performed by the SDF normalizer.

All symbols are first-class. For example, symbols can be used at the right-hande side of a production. This means that it is possible to define production rules that construct lists of symbols, optional symbols, and even literals.

Implementation Features

Sdf.SdfLanguage moved from Tools.FeaturesOfSDF2 on 24 Jan 2004 - 17:11 by MartinBravenboer