Related articles |
---|
Free C Interpreters (CINT, UPS, EiC) dibyendu@mazumdar.demon.co.uk (Dibyendu Majumdar) (1999-01-02) |
From: | Dibyendu Majumdar <dibyendu@mazumdar.demon.co.uk> |
Newsgroups: | comp.compilers |
Date: | 2 Jan 1999 21:48:55 -0500 |
Organization: | Compilers Central |
Keywords: | C, interpreter, summary |
Hi.
I am writing this in the hope that it may be of use to others.
I have wanted to write an ISO/ANSI C interpreter for some
time. However, not being trained in this area, I found it difficult to
get started. Maybe one day I will understand the principles well
enough to write a C interpreter on my own.
In the meantime, I decided that the next best thing for me to do was
to understand an existing implementation of a C interpreter. After
looking for several months for a decent implementation of an ISO/ANSI
C interpreter for which source was freely available - I found three
that I liked. These are described below:
1. CINT - a C/C++ interpreter
This was the first one I found. The website is:
root.cern.ch/root/Cint.html
Created by Masaharu Goto, this is reasonably good C/C++
interpreter. Particularly notable is its ability to call external
routines (even in shared libraries or DLLs). The product is portable
and available for Win32/MSDOS/various UNIX flavors. The Interpreter
can be linked into any C application. It is also perhaps the only C++
interpreter available freely.
From my point of view I found the quality of code such that it was
very near impossible to understand how it works. However, it works
reasonably well - it can interpret itself !!
2. UPS C Debugger
Although this is really an X-Windows graphical debugger for C/C++, it
contains a reasonably complete ANSI-C interpreter. This implementation
is interesting for the following reasons:
* It can interpret single C source files, or
multiple C source files. When interpreting multiple C
sources, a compile/link model is used to build
a byte-code executable. This can then be executed
by a Virtual Machine interpreter. This works for
single C source files as well.
* The UPS debugger can debug (with limitaions) an
interpreter executable created above.
The website for this is www.concerto.demon.co.uk/UPS. Note that the
UPS C interpreter is undocumented - and does not work straight out of
the box as of now. I can supply patch files for Linux RedHat 5.1 to
anyone who is interested - please write to me at
dibyendu@mazumdar.demon.co.uk.
I found this implementation the best from my point of view. The
quality/style of code is very good and the design is excellent - the
design completely separates the following phases:
lexer
parser
compiler
linker
executor
debugger
If you want to understand how to write interpreters/debuggers, I
recommend this whole-heartedly.
3. EiC byte-code interpreter
I recently found this. Created by Ed Breen, this is a good C
interpreter. It can be run interactively or in scripting mode. Since
most readers of this new group are already aware of this interpreter -
I am not describing it further here.
The website I use is antarctica.penguincomputing.com/~eic.
For my purposes, I found UPS to be better mainly because of the way it
is written.
-----------------
I am currently working on improving the UPS C Interpreter. I have
made a number of bug-fixes/minor enhancements - my main objective is
to make the interpreter as 'ANSI/ISO conforming' as possible. I have
also created a list of known problems/bugs in the interpreter, and a
brief writeup.
I have submitted my changes to the team that maintains the code -
hopefully the fixes will be available in the standard release very
soon.
Until then, I can supply a patch to anyone who is interested (my patch
will only work on RedHat 5.1).
Regards
Dibyendu
dibyendu@mazumdar.demon.co.uk
Return to the
comp.compilers page.
Search the
comp.compilers archives again.