"In the beginning were the words, and the words were trees,
and the trees were words. All words were made through
grammars, and without grammars was not any word made
that was made. Those were the days of the garden of Eden.
And there where language engineers strolling through the
garden. They made languages which were sets of words by
making grammars full of beauty. And with these grammars,
they turned words into trees and trees into words. And the
trees were natural, and pure, and beautiful, as were the grammars.
Among them were software engineers who made software
as the language engineers made languages. And they
dwelt with them and they were one people. The language engineers
were software engineers and the software engineers
were language engineers. And the language engineers made
language software. They made recognizers to know words,
and generators to make words, and parsers to turn words
into trees, and formatters to turn trees into words.
But the software they made was not as natural, and pure,
and beautiful as the grammars they made. So they made software
to make language software and began to make language
software by making syntax definitions. And the syntax definitions
were grammars and grammars were syntax definitions.
With their software, they turned syntax definitions into
language software. And the syntax definitions were language
software and language software were syntax definitions. And
the syntax definitions were natural, and pure, and beautiful,
as were the grammars."
Thus starts our essay on declarative syntax definition, which has been accepted for presentation at the Onward! 2010 conference:
Lennart C. L. Kats, Eelco Visser, Guido Wachsmuth.
Pure and Declarative Syntax Definition: Paradise Lost and Regained.
In Proceedings of Onward! 2010. ACM, 2010.
(draft of final version)
Abstract
Syntax definitions are pervasive in modern software systems,
and serve as the basis for language processing tools
like parsers and compilers. Mainstream parser generators
pose restrictions on syntax definitions that follow from their
implementation algorithm. They hamper evolution, maintainability,
and compositionality of syntax definitions. The
pureness and declarativity of syntax definitions is lost. We
analyze how these problems arise for different aspects of
syntax definitions, discuss their consequences for language
engineers, and show how the pure and declarative nature of
syntax definitions can be regained.