Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

Objective-C target

Author

Alan Condit

acondit(at)alansmachineworks(dot)com

Derived from work by:
Image Added

Kay Röpke

Status

As of mid July '06 the better part of the lexer support is done. Simple parsers can be built, too.

Features missing are:

  • Tree support
  • Scopes
    • Parameters
    • Return values
    • arbitrary scopes
  • Tests - well, most of them
  • Template support
  • Labels are partially supported

Roadmap

The plan is to be totally feature complete by the time v3 goes final. Tree support will come last, as it requires a bit more work from Terence on the Java side of life. Better to provide a stable lexer and parser generator than to have flaky tree support at first.
I will use v3 to write a number of different small applications in order to find out about all the small bugs that are hiding in the corners. Thus development will probably not be milestone based, but rather fix-as-they-come-up kroepke(at)classdump(dot)org

Status

The current ANTLR release includes a working Xcode plugin, so you can automatically generate your grammars from within Xcode.
It automatically tracks all the dependencies between the different grammars in your project to build them in the right order.
Common error messages and warnings are picked up for display in Xcode using the new -message-format gnu option in ANTLR.
There remain some errors and warnings which cannot be picked up yet, due to missing information in ANTLR itself, but this may change in the future.
Debugging support for use with ANTLRWorks is done, except for exceptions (wink) I just haven't got around to do it yet. The socket handling code isn't error proof yet, I will add more thorough error handling for the final version. Other than that it works beautifully!

ANTLR.framework

Features (partially) missing are:

  • Template support (postponed because there is no ST grammar for ANTLR v3 yet)
  • Debugging support for exceptions (Objective-C exceptions must match the exact names of the Java exception classes)

Features completed:

  • Single rule return values
  • FOLLOW sets (bitsets)
  • cyclic DFAs
  • Scopes
    • dynamic scopes
    • rule parameters
  • Labels
  • Syntactic Predicates
  • Semantic predicates
  • Tree support (output=AST)
  • Tree parsers
  • Debugging support for parsers.
  • Debugging support for AST building.

ANTLR Xcode plugin (Kay's work. I have done nothing with this other than use it.)

Features missing:

  • Syntax highlighting & function popup support (I'd still encourage you to use ANTLRWorks for development!) For this I need more understanding of the dreaded classes Xcode uses internally, to be able to replace them with ANTLR3 (smile)
  • Debugging (long term goal)

Features completed:

  • Build settings you can pass to org.anltr.Tool
  • Dependency calculation
  • Code generation
  • All warnings & error messages are picked up by Xcode.
  • Basic syntax highlighting works, using the standard Xcode mechanisms

Roadmap

Building ASTs and tree parsers is working now. ANTLR.framework is built to be Universal, but only tested on Intel machine.
I am using v3 to write a small application. I will fix bugs as I become aware of them.
Regarding the template output support of v3, this will require an Objective-C implementation of ST , which will take a lot of time. So don't expect that for 3.0and I am not working on that, but help is always welcome.
I have ANTLRWorks generating code for Objective-C based grammars, but you will have to rebuild the ANTLRWorks jar to use it. You can also use the Xcode 2.4
plugin, available for download via link here . I have put up binary runtime framework on my page (see above).

Platforms

I will only concern myself with the Mac. There will be no GNUStep support.
As for Mac OS X versions, I aim to be compatible with at least 10.3 6 as a target platform , though and the Xcode project will require the latest version availablewas built with 3.2.3, since it really doesn't make a lot of sense to not use it in an earlier version.

The Xcode plugin requires at least Xcode 2.3. Currently ANTLR requires 10.4.  However, unless there are very good reasons to support versions prior to 10.6, it will not get priority. I don't have a machine on which to test earlier versions. Right now I am working on Snow Leopard (10.6). I expect the current version to "just work".

Runtime

The runtime will be is built in terms of the NS* level of classes, and is probably not very optimized in the first versions. I'll identify hotspots later and maybe add a CF-based runtime for speed if it turns out to be a problemlargely a fairly direct translation of the original java code.
The layout of the runtime is essentially the same as the Java version, though subtle differences will be visible where it makes it more natural to the Objective-C programmer. Naming of classes and methods may be slightly different and sometimes inner workings are too.
Initial tests don't show serious performance problems, though I'm sure there will be opportunities for optimization.
The biggest problem at the moment are the numerous unused variables created at the moment. Often ANTLR will build up lists of tokens but subsequently not use them in any significant way, which leads to wasting time and space. This can only be fixed in the ANTLR code generator and not for individual targets. Part of the support for this is already there but it needs to be extended.

Examples

The goal is to provide the complete set of Java-based examples in Objective-C for comparison. There may be additional examples contained in the Xcode project. These exist mainly for development purposes as testcases, or to try out features.