# Work in progress This document is a work in progress, and may or may not resemble the final documentation for creating a new language target (runtime+templates) for ANTLR 4. # Creating a runtime port ## Development directory structure The directory structure for developing a new ANTLR 4 target does not have a required form. The following directory structure may be used to provide the same form as the ANTLR 4 reference code base. This form is especially recommended for developers who plan to port both the ANTLR 4 Tool *and* Runtime to a new language. / /runtime/[target]/ /tool/src/org/antlr/v4/codegen/[target]Target.java /tool/resources/org/antlr/v4/tool/templates/codegen/[target]/[target].stg ### Tracking progress against the reference repository To assist in updating your target as changes are made in the reference (Java) repository, you can include the reference repository as a submodule of the Git repository for your target. The submodule will also allow other users to see which commit your target is synchronized with. I included this submodule at the following location. /reference/antlr4 The following command will add the submodule to your working repository. git submodule add -b "master" "git://github.com/antlr/antlr4.git" "reference/antlr4" *Note:* the C# target uses a special branch of ANTLR 4 as a reference. The branch "sharpen" is based on the "optimized" branch, but modified to operate as an input to the Sharpen tool for automatically converting Java code to C#. The submodule for this target was added using the following command. git submodule add -b "sharpen" "git://github.com/sharwell/antlr4.git" "reference/antlr4" ## Release structure ### Code generation support The target must provide a `.jar` file for the ANTLR 4 Tool to use for code generation. The key file to include is the following: /META-INF/services/org.antlr.v4.codegen.Target This file should contain the fully qualified name of the class extending `Target` for your runtime. This will likely look like the following. org.antlr.v4.codegen.[target]Target If you are providing multiple code generation targets in a single `.jar` file, you should include one line for each target. The C# code generation target provides the following entries. org.antlr.v4.codegen.CSharp2Target org.antlr.v4.codegen.CSharp3Target org.antlr.v4.codegen.CSharp4Target The code generation templates themselves are loaded by the runtime via the `TODO()` method. The default implementation (inherited from the `Target` superclass) will attempt to load the template from the following path in the `.jar` file. /org/antlr/v4/tool/templates/codegen/[target]/[target].stg ### Runtime The runtime for a new target may be distributed in any form relevant to that target language.