We have used two different systems for developing the parser generators: Bondorf's
Similix [Bondorf 1991] for the initial experiments, and Thiemann's PGG system [Thiemann 1996a] for the production version.
The question is: "Is it possible to replace the compile-link-load paradigm by exploiting the ability to perform static specialization at a variety of points in time (not just at compilation time)?" This can be supported either via linguistic mechanisms (e.g., run-time code generation mechanisms, as found in C, for instance) or by tools such as partial evaluators (e.g.,
Similix, Schism, CMix, etc.).
Bondorf and Jorgensen [1993] implemented both 0-[CFA.sub.[subset or equal to]] and 0-[CFA.sub.=] for Scheme as part of the partial evaluator
Similix. For Scheme, the condition of finite types does not hold in general.
unoptimized analysis time benchmark run time n = 1 n= [infinity] texer 1.18 0.37 0.39
similix 10.73 1.36 1.25 ddd 15.76 1.38 0.46 conform 0.22 0.05 0.05 dynamic 0.25 0.36 0.34 early 0.08 0.06 0.07 em-fun 46.72 0.08 0.08 em-imp 27.09 0.08 0.08 graphs 65.86 0.04 0.04 interpret 1.10 0.55 3.12 lattice 40.36 0.03 0.04 matrix 38.81 0.06 0.08 maze 8.12 0.06 0.06 nbody 34.30 0.21 0.20 splay 0.27 0.06 0.06 run-time speedup benchmark n = 0 n = [infinity] texer 6% 5%
similix 1% 1% ddd 0% 0% conform 9% 9% dynamic 0% 0% early 12% 12% em-fun 5% 5% em-imp 5% 5% graphs 6% 7% interpret 0% 0% lattice 9% 9% matrix 7% 7% maze 9% 9% nbody 16% 16% splay 14% 14% The effects of the two analyses are also measured quantitatively.