Antlr3AdaTarget
Ada ANTLR v3 Target
Author
Luke A. Guest (Archeia)
Status
Currently dormant.
Old stuff that is no longer relevant, maybe ;)
I currently have a very basic Ada95Target.java file which produces package bodies and specifications using the GNAT filename convention. In conjunction with this, I've taken the Java.stg file from codegen/templates/Java and started to modify this to produce a lexical analyser package.
Currently, a very basic scanner is produced with a tagged type in the specification. This won't compile as there is no runtime and I've not quite decided on how to implement the runtime as yet.
As I'm currently learning ANTLR and StringTemplate, this will probably take some time to achieve.
Runtime
- Ada95 is strongly typed and the runtime has been implemented in such a way to try to take the Java
code and enforce restrictions upon the types rather than using int's all over the place.
- Ada95 doesn't support mutually dependent packages, so this must be avoided at all costs.
- Also, Ada95 doesn't have support for interfaces, so mix-in inheritance will be used where appropriate.
Package differences from Java to Ada95
Java |
Ada95 |
Comment |
---|---|---|
IntStream |
ANTLR.Stream |
Modified to be a generic abstract type so that type checking can |
BaseRecognizer |
ANTLR.Root_Recogniser |
The word "Root" is more consistent with the Ada runtime library |
Method differences from Java to Ada95
Java |
Ada95 |
Comment |
---|---|---|
LA |
Look_Ahead |
For reasons of readability |
Usage
Compilation
TODO Show how to compile the runtime.
Example
TODO Provide a quick an easy example grammar.
Future work
Ada 2005
I decided not to target Ada 2005 as there is only 1 compiler that support the new standard, and as it's so new, it doesn't do it very well (yet). Ada 2005 would've made the runtime easier to port, as it would be possible to provide an almost 1:1 correlation from Java to Ada.
What does Ada 2005 provide on top of Ada95?
- Interfaces, a la Java. Yup multiple inheritance of interface types.
- Mutually dependent packages, finally!
- Dot notation for tagged types (that's classes in C++/Java speak), this makes it a bit less clumsy, so instead of typing:
ANTLR.Lexer.Match(Self, 'A');
we can write
Self.Match('A');
which is a bit nicer.