The availability of the Brandeis’ compiler-compiler in the mid-seventies was a rich source for projects in language design and implementation and my students were involved in most of those projects. Among them, the following yielded publications in refereed journals.
I was the first computer scientist to propose a method for syntax-directed unit conversion. For example, one could specify a real number in pounds per square inch and have a program automatically translate it into kilos per square centimeter or any other compatible unit of stress [Coh 73b]. From a computer science perspective, this is a first application of typing in programming languages. The work was later generalized to include dimensional analysis, a branch of physics and engineering concerned with experiments using physical models [CF 75].
Neil Carpenter, a pre-med student (who is now a surgeon) was the first person to use syntax-directed translation to generate 2D representations of organic formulas corresponding to formulas input as text [Car 76].
Daniel Pfau and Gregory Finn were my coauthors in the design of a language to define spatial trusses [CFP 74]. That project allowed me to express my views on how structural design languages should be developed.
Peter Grossman and I developed a syntax-directed translator of partial differential equations — input in mathematical notation — that generated a numeric program capable of solving them using relaxation techniques [CG 75]. For example, one could input Laplace’s heat equations and generate a program that computed the internal values of temperatures in a surface whose boundaries had been supplied with given initial temperatures.
Also in the realm of applications, I include the reenacting of the computational part of my doctoral thesis at Illinois [Coh 76]. In a couple of weeks, I was able to write a Macsyma program that performed all the symbolic computations of an energy minimization problem (using Fourier series and Raleygh-Ritz techniques). That program generated a fairly large system of non-linear simultaneous equations. I then used Fortran subroutines to solve those equations. In less than a month, I was able to reproduce the results that had taken me over a year to obtain using the Illiac I [Coh 60].