Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

The C++ code generation target

Note: The C++ target was last synced with the 3.4 version of ANTLR

The ActionScript target closely follows the C target. The API and runtime behavior are consistent to the extent possible.

Please send bug reports, feedback, patches to the antlr-interest mailing list

Requirements

To use generated code, you'll need to include Cpp runtime package in your include path.

Usage

Selecting ActionScript output

Just add language=Cpp; to the options section of your grammar:grammar T;
options {
language=Cpp;
other options
}

...
For a grammar T.g ANTLR3 will then create the files TLexer.hpp, TLexer.cpp, TParser.hpp and TParser.cpp which contain the classes TLexer and TParser. Tree Parsers are not yet supported.

Specifying an ActionScript package for your recognizer

You can specify that your generated recognizer should be declared within a specific namespace as shown below. By default all recognizers are generated as top-level types with no enclosing namespace. The Parser has to include the Lexer and both the lexer and Parser have to include the traits
grammar MyGrammar;

options
{
language=Cpp;
}

@parser::namespace { UserNamespace } // Or just @namespace { ... }

@lexer::namespace { UserNamespace }

// rest of grammar follows
....lexer grammar MyGrammar;

options
{
language=Cpp;
}
@includes
{
#include "UserTraits.hpp"
}
@namespace { UserNamespace }

// rest of grammar follows
....parser grammar MyGrammar;

options
{
language=ActionScript;
}
@includes
{
#include "UserTraits.hpp"
#include "TLexer.hpp"
}
@namespace{ UserNamespace }

// rest of grammar follows
....

Using the generated classes

To use a grammar T.g:

#include <TParser.hpp>

using namespace UserNamespace;
int main(int argc, char* argv[])
{
TTraits::InputStreamType input(fName, ANTLR_ENC_8BIT);
TLexer lxr(&input); // TLexerNew is generated by ANTLR
TTraits::TokenStreamType tstream(ANTLR_SIZE_HINT, lxr.get_tokSource() );
TParser psr(&tstream); // TParserNew is generated by ANTLR3

psr.entry_rule();

}

Actions

This target currently supports the action scopes @lexer and @parser for global actions. The following action names are known:

  • namespace -Wrap the generated classes with the specified namespace.
  • header - Will be inserted right after ANTLRs own imports at the top of the generated file. 
  • include, pre-include, post-include - same meaning as in C Target
  • init - Will be inserted at the end of the constructor of the lexer/parser. Here you can setup your own instance attributes.
  • members - Will be inserted in the class body of the lexer/parser. This is the right place for custom methods and class attributes.

Unsupported features

  • -debug option: mostly useful for integration into ANTLRWorks.
  • output=template: StringTemplate has not been ported to ActionScript, so template-based recognizers are not supported.
  • TreeParser: useful for generating trees
  • No labels