The compiler support facility is the most significant difference between YAFL and the other modern third generation languages. The compiler support facility is the availability of the compiler passes and its attached intermediate data structures as documented and usable YAFL constructs, defined as part of the standard library.
The software engineer (rather than the programmer) can use this feature to write dedicated development tools at a fraction of the cost required for usual languages, where he would have to rewrite some non-trivial pieces of code, and take complex rules into account: visibility, precedence, renaming, etc...
Some utilities can help to build the parsing process (Yacc, Lex, and the whole compiler-compiler set of tools), but many source manipulations require more in-depth semantical analysis than what such tools can provide. Some excellent work has been done in extending compiler-compilers further than the front-end only [Grosch 90], but they were mainly designed with usual compilers in mind. They are far from being ideal as an initial framework for extensions based on reusable compilation services.
There are very few things in YAFL's definition which refer to the compiler support. Since it is mainly related to the standard library rather than to any syntactical or semantical issues, almost every modern language could include a similar feature. It is true that object-oriented programming is specially suited to describe compilers and the related data types in an elegant, human-readable and reusable fashion (see below, object-oriented patches). The Beta programming language [Kris 91] provides compiler support facilities, but restricted to the front-end part of the compiler only.