EPP

Last updated: December 21, 2000

EPP is a pre-processor that I am writing for Euphoria. It will add features like object-oriented programming to the Euphoria language by translating the extended Euphoria code into standard Euphoria code, so it will be compatible with existing code and the Euphoria software already available.

New Stuff

In thinking about how to go about adding some syntax (specifically structures) to EPP, I decided that my implementation of parser.e was rather ugly and difficult to extend. I'm currently re-writing it with some much cleaner, much more extendible, and much more reusable code. Once that's done, it should be much easier to add structures etc.

Another update, which fixes a few bugs (specifically expr trees), and adds a simple extension like the one in David Cuny's preprocessor that lets you do:

s[end]
instead of
s[length(s)]

I just updated EPP again. Now the parser is a little cleaner, better documented, and more extendible.

I've decided to start working on EPP some more as part of an Euphoria to C/Java translator. I've just finished a simple parser, which creates a tree from the tokens. You can get it as a .zip or a .tar.gz.

Since the full EPP program will take a long time to write, I'll write some simple Euphoria pre-processors to do various tasks. Right now, I have the enum pre-processor which converts something like:

enum EuphoriaTypes {OBJECT, ATOM, SEQUENCE, INTEGER}

to:

type EuphoriaTypes(integer x)
    return x > 0 and x < 4
end type
constant OBJECT = 1
constant ATOM = 2
constant SEQUENCE = 3
constant INTEGER = 4

It also handles global enums by making the type and constants global.
Get enum converter here

I decided to continue working on my Euphoria version of EPP. I have added to it a little and fixed several bugs. It now supports constants to some extent, but not sequences. The way the information is stored in sequences is getting very confusing. I will probably have to revise it. If you can help fix it up, please give it a try and tell me what you find.

I just finished converting the tokenizer to Java. I think I will be able to develop more efficiently in Java since it is object-oriented. I hope to have the rest converted soon.

Now supports global and standard types, procedures, and functions to some extent. It can now parse arguments to the above as well.

I finally worked out the bugs that stopped me from developing EPP further. It is still pretty limited, but it is a little more useful now. This time, it can work with "with" and "without" options and procedures and functions to some extent. There is a file included in the package called tree.ex that displays a tree of all of the included files, what options are used, and what procedures and functions are defined.

The complexity of my Euphoria pre-processor was getting to be too great to handle, and I decided that in order to make it extendible and more manageable, I am starting a new version, an almost complete re-write of the pre-processor. This version will be divided up into about 11 files (10 include files and the pre-processor program).

I have successfully updated my tokenizer so that you can modify it easily using a few calls, so it can recognize block comments, += and . etc..

Now includes full documentation for tokens.e

How You Can Help

You can really help by downloading EPP, and adding stuff to it, then sending it to me. Once it is finished (or mostly finished), bug reports (and fixes), additions (like putting in new elements for the "extended Euphoria" language), and improvements to the code would be great. While it is still being developed, you can help write it, document it, or come up with ideas for it (like how to make an interface for adding to it etc.). Just e-mail me, and I'll tell you how far along I am, and what you can do to help. If there is something that you really want to work on, or you are really good at, please tell me. Also tell me as soon as possible what you've done with it so I don't write it if you've already written it, and so I can make the rest of the code compatible. Also, putting in comments to document your code would be really great.