Skip to main content

Concrete Syntax



Concrete syntax is a notation for patterns that match parse trees and expressions that generate them.


`(Nonterminal) `sentence``

Where each sentence is a string over the language generated from Nonterminal. This language is extended in the following way. Each non-terminal reachable X from Non-terminal has an added alternative to allow nested Rascal Patterns inside of concrete syntax fragments:

syntax X = "<" Type Var ">";`


A concrete syntax fragment allows the programmer to write patterns and expressions in the language that is currently analyzed, transformed or generated. The ./Concrete Syntax feature is derived from ./Syntax Definitions. For any non-terminal defined in a ./Syntax Definition, you may use ./Concrete Syntax to match or generate its parse trees.


  • Easy notation for complex structures
  • The leading Nonterminal always scopes the right parser to run.
  • Source-to-source transformations are easy with concrete syntax patterns.