Summary
Design and correctness proof of a compiler for Lucid, a non-procedural proof-oriented programming language, are given. Starting with the denotational semantics of Lucid, an equivalent operational semantics is derived, and from it the design of compiling algorithms. The algorithms are proved to compile correctly a subset of the language. A discussion of the design choices and of the subset restrictions gives insight into the nature of Lucid as well as into the problem of compiling related non-procedural languages.
Similar content being viewed by others
References
Allen, F.E.: Program optimization. In: Annl. review of autom. programming (Halpern, Shaw, eds.), Vol. 5, pp. 239–308. New York: Pergamon 1969
Ashcroft, E.A.: Program proving without tears. Proc. of the Intl. Symp. on Proving and Improving Programs, pp. 99–111, Senans, France, July 1975
Ashcroft, E.A., Wadge, W.: Lucid, a non-procedural language with iteration. Comm. ACM 20, 7, 519–526 (1977)
Ashcroft, E.A., Wadge, W.: Lucid, a formal system for writing and proving programs. SIAM J. Comput. 5, 336–354 (1976)
Ashcroft, E.A., Wadge, W.: Lucid, scope structures and defined functions. Tech. Rept. CS-76-22, Dept. of Comp. Sci., University of Waterloo, Nov. 1976, 28 pp.
Cargill, T.A.: Deterministic operational semantics for Lucid. Tech. Rept. CS-76-19, Dept. of Comp. Sci., University of Waterloo, June 1976, 35 pp.
Chirica, L.M., Martin, D.F.: An approach to compiler correctness. Intl. Conf. on Reliable Software, June 1976, pp. 96–103
Dennis, J.B.: First version of a data-flow language. Proj. MAC Memo 61, MIT, May 1975
Floyd, R.W.: Assigning meaning to programs. In: Math, aspects of comp. sci., Vol. 19, pp. 19–32. Providence, R.I.:
Guttag, J.: Abstract data types and the development of data structures. Suppl. of Proc. of ACM Conf. on Data, Salt Lake City, Utah, Mar. 1976, pp. 37–46
Hoare, C.A.R., Wirth, N.: An axiomatic definition of the programming language PASCAL. Acta Informat. 2, 335–355 (1973)
Hoffmann, C.M.: Design and correctness proof of a compiler for Lucid. Tech. Rept. CS-76-20, Dept. of Comp. Sci., Univ. of Waterloo, May 1976, 85 pp.
Kosinski, P.R.: A data-flow programming language. IBM Res. Rept. RC-4264, Mar. 1973, 134 pp.
London, R.L.: Correctness of two compilers for a LISP subset. A.I.Memo 151, Stanford Univ., 1971
McCarthy, J., Painter, J.A.: Correctness of a compiler for arithmetic expressions. In: Math. aspects of comp. sci., Vol. 19. Providence, R.I.: 1967
Miller, R.E., Cocke, J.: Configurable computers: A new class of general purpose machines. IBM Res. Rept. RC-3897, June 1972, 14 pp.
Milner, R., Weyrauch, R.: Proving compiler correctness in a mechanized logic. Machine Intelligence, Vol. 7, pp. 51–71, Univ. of Edinburgh, 1973
Morris, F.L.: Advice on strucuring compilers and proving them correct. ACM Symp. on Principles of Progr. Lang. Boston, 1973, pp. 144–152
Rumbaugh, J.E.: A parallel asynchronous architecture for data-flow languages. MIT Proj. MAC Rept. TR-150, May 1975, 319 pp.
VanEmden, M.: Verification conditions as representation for programs. Res. Rept. CS-76-03, Dept. of Comp. Sci., Univ. of Waterloo, Jan. 1976, 21 pp.
Author information
Authors and Affiliations
Additional information
Work supported by the National Research Council of Canada
Rights and permissions
About this article
Cite this article
Hoffmann, C.M. Design and correctness of a compiler for a non-procedural language. Acta Informatica 9, 217–241 (1978). https://doi.org/10.1007/BF00288883
Received:
Issue Date:
DOI: https://doi.org/10.1007/BF00288883