The J% compiler adopts the language processing system architecture [47], more specifically it follows the pipe and filter
compiler architecture variation. Fig. 4 illustrates the compilation process. Both the J% compiler and the SQL module are
implemented in Java. The compilation process is straightforward; the compiler scans the input source files (n.jmod and n.
java). Then it marks each file as external or Java. The external keyword denotes that an SQL type is declared in this file, and
the marker Java that it contained pure Java–compatible code. Configuration types are also Java files. All this information
populates directly the symbol table and other type information structures. The code generator is invoked and intermediate
Java-compatible code is generated. Finally, the Java compiler is invoked, and translates the code into executable JVM
bytecode. All information regarding symbols, the external configuration and all the specifics of the external code are available
to the module at compile-time. After its initialisation, the SQL code is further analysed and checked for discrepancies, which
are reported as compile-time errors. Table 6 presents a set of size metrics for the SQL module.