Skip to content


An SDF3 specification consists of a number of module declarations. Each module defines sections and may import other modules.


Modules may import other modules for reuse or separation of concerns. A module may extend the definition of a non-terminal in another module. A module may compose the definition of a language by importing the parts of the language. The structure of a module is as follows:

module $ModuleName



The module keyword is followed by the module name, then a series of imports can be made, followed by sections that contain the actual definition of the syntax. An import section is structured as follows:

imports $ModuleName*

Note that SDF3 does not support parameterized modules.


An SDF3 module may constitute of zero or more sections. All sections contribute to the final grammar that defines a language:

Last update: July 3, 2024
Created: July 3, 2024