Newsgroups: comp.lang.lisp
Path: cantaloupe.srv.cs.cmu.edu!rochester!udel-eecis!gatech!csulb.edu!hammer.uoregon.edu!hunter.premier.net!news.sprintlink.net!news-peer.sprintlink.net!uunet!in3.uu.net!uucp4.uu.net!world!wware
From: wware@world.std.com (Will Ware)
Subject: lisp-to-c translation
Message-ID: <E42MEH.2pJ@world.std.com>
Organization: The World Public Access UNIX, Brookline, MA
X-Newsreader: TIN [version 1.2 PL2]
Date: Wed, 15 Jan 1997 22:27:52 GMT
Lines: 81

This is a fairly feeble stab at a Lisp-to-C translator. The resulting code
should be run through 'indent' or another C pretty-printer prior to manual
editing. This assumes a C library of Common Lisp functions, which hasn't
been written. It attempts to use macro definitions that would allow fair
flexibility in how you'd define CONSes and other Lisp-ish things. To use
this thing, load 'lisp2c.lsp' into your favorite Common Lisp system, then
type '(lisp2c "bozo.lsp" "bozo.c")' to do a translation.

This is definitely "as is" code. It's certainly not meant as any kind of
complete solution, but it might be a useful starting point for people who
need to do Lisp-to-C translation, lack big bucks, and have a lot of spare
time.

Known egregious defects (lots, really, but this is sort of a sampler):
1. 'format' is translated to 'printf/sprintf/fprintf' but the format strings
	are left with Lisp-ish formatting.
2. Lisp functions always return something; generated C functions may have
	'return' statements in odd or incorrect places.
3. Data objects are used a little inconsistently, some places I assume that
	a simple object (like an integer or string) is its obvious C
	equivalent, without checking to see if it's in some struct-like
	wrapper. No run-time type-checking. Also, 'car', 'cdr' and their
	brethren appear cavalierly in generated code.

begin 644 lisp2c.lsp.gz
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
A[7-%^RO]J_7HZYW.RB33%7EW[3V37&+Y/Z]:.'M4'0``
`
end
-- 
-------------------------------------------------------------
Will Ware <wware@world.std.com> web <http://world.std.com/~wware/>
PGP fingerprint   45A8 722C D149 10CC   F0CF 48FB 93BF 7289
