2.8 KiB
2.8 KiB
Creating an ANTLR Language Target
This document describes how to make ANTLR generate parsers in a new language, X.
Overview
Creating a new target involves the following key elements:
- For the tool, create class XTarget as a subclass of class
Target
in packageorg.antlr.v4.codegen.target
. This class describes language specific details about escape characters and strings and so on. There is very little to do here typically. - Create X.stg in directory tool/resources/org/antlr/v4/tool/templates/codegen/X/X.stg. This is a StringTemplate group file (
.stg
) that tells ANTLR how to express all of the parsing elements needed to generate code. You will see templates calledParserFile
,Parser
,Lexer
,CodeBlockForAlt
,AltBlock
, etc... Each of these must be described how to build the indicated chunk of code. Your best bet is to find the closest existing target, copy that template file, and tweak to suit. - Create a runtime library to support the parsers generated by ANTLR. Under directory runtime/X, you are in complete control of the directory structure as dictated by common usage of that target language. For example, Java has:
runtime/Java/lib
andruntime/Java/src
directories. Undersrc
, you will find a directory structure for packageorg.antlr.v4.runtime
and below. - Create a template file for runtime tests. All you have to do is provide a few simple templates that indicate how to print values and declare variables. Our runtime test mechanism in dir
runtime-testsuite
will automatically generate code in a new target and check the results. All it needs to know is how to generate a test rig (i.e., amain
program), how to define various class fields, compare members and so on. You must create a X directory underneathruntime-testsuite/resources/org/antlr/v4/test/runtime
. Again, your best bet is to copy the templates from the closest language to your target and tweak it to suit.
Getting started
- Fork the
antlr/antlr4
repository at github to your own user so that you have repositoryusername/antlr4
. - Clone
username/antlr4
, forked repository, to your local disk. Your remoteorigin
will be the forked repository on GitHub. Add a remoteupstream
to the originalantlr/antlr4
repository (URLhttps://github.com/antlr/antlr4.git
). Changes that you would like to contribute back to the project are done with pull requests. - Try to build it before doing anything
$ mvn compile
That should proceed with success. See Building ANTLR for more details. (That link does not currently work as I have that documentation in a branch. see https://github.com/parrt/antlr4/blob/move-doc-to-repo/doc/building-antlr.md for now.)