forked from jasder/antlr
Merge branch 'master' of github.com:antlr/antlr4
This commit is contained in:
commit
fc79752748
|
@ -1,13 +1,19 @@
|
||||||
# Maven build folders
|
# Maven build folders
|
||||||
|
/target/
|
||||||
/tool/target/
|
/tool/target/
|
||||||
/runtime/Java/target/
|
/runtime/Java/target/
|
||||||
/gunit/target/
|
|
||||||
/antlr4-maven-plugin/target/
|
/antlr4-maven-plugin/target/
|
||||||
|
|
||||||
# Ant build folders
|
# Ant build folders
|
||||||
/build/
|
/build/
|
||||||
/dist/
|
/dist/
|
||||||
|
|
||||||
|
# NetBeans user configuration files
|
||||||
|
/nbactions.xml
|
||||||
|
/tool/nbactions.xml
|
||||||
|
/runtime/Java/nbactions.xml
|
||||||
|
/antlr4-maven-plugin/nbactions.xml
|
||||||
|
|
||||||
# IntelliJ projects
|
# IntelliJ projects
|
||||||
*.iml
|
*.iml
|
||||||
*.ipr
|
*.ipr
|
||||||
|
|
14
CHANGES.txt
14
CHANGES.txt
|
@ -6,8 +6,22 @@ December 1, 2012
|
||||||
line 2:3 token recognition error at: '\t'
|
line 2:3 token recognition error at: '\t'
|
||||||
line 2:4 token recognition error at: '\n'
|
line 2:4 token recognition error at: '\n'
|
||||||
|
|
||||||
|
November 30, 2012
|
||||||
|
|
||||||
|
* Maven updates (cleanup, unification, and specify Java 6 bootstrap classpath)
|
||||||
|
|
||||||
|
November 28, 2012
|
||||||
|
|
||||||
|
* Maven updates (uber-jar, manifest details)
|
||||||
|
|
||||||
|
November 27, 2012
|
||||||
|
|
||||||
|
* Maven updates (prepare for deploying to Sonatype OSS)
|
||||||
|
* Use efficient bitset tests instead of long chains of operator ==
|
||||||
|
|
||||||
November 26, 2012
|
November 26, 2012
|
||||||
|
|
||||||
|
* Maven updates (include sources and javadocs, fix warnings)
|
||||||
* Don't generate action methods for lexer rules not containing an action
|
* Don't generate action methods for lexer rules not containing an action
|
||||||
* Generated action and sempred methods are private
|
* Generated action and sempred methods are private
|
||||||
* Remove unused / problematic methods:
|
* Remove unused / problematic methods:
|
||||||
|
|
|
@ -48,135 +48,16 @@
|
||||||
<packaging>maven-plugin</packaging>
|
<packaging>maven-plugin</packaging>
|
||||||
|
|
||||||
<name>ANTLR 4 Maven plugin</name>
|
<name>ANTLR 4 Maven plugin</name>
|
||||||
|
<description>Maven plugin for ANTLR 4 grammars</description>
|
||||||
|
|
||||||
<prerequisites>
|
<prerequisites>
|
||||||
<maven>3.0</maven>
|
<maven>3.0</maven>
|
||||||
</prerequisites>
|
</prerequisites>
|
||||||
|
|
||||||
<developers>
|
|
||||||
|
|
||||||
<developer>
|
|
||||||
<name>Terence Parr</name>
|
|
||||||
<url>http://antlr.org/wiki/display/~admin/Home</url>
|
|
||||||
<roles>
|
|
||||||
<role>Project lead - ANTLR</role>
|
|
||||||
</roles>
|
|
||||||
</developer>
|
|
||||||
|
|
||||||
<developer>
|
|
||||||
<name>Sam Harwell</name>
|
|
||||||
<url>http://tunnelvisionlabs.com</url>
|
|
||||||
<roles>
|
|
||||||
<role>Developer</role>
|
|
||||||
</roles>
|
|
||||||
</developer>
|
|
||||||
|
|
||||||
<developer>
|
|
||||||
<name>Jim Idle</name>
|
|
||||||
<url>http://www.temporal-wave.com</url>
|
|
||||||
<roles>
|
|
||||||
<role>Originator, version 4.0</role>
|
|
||||||
</roles>
|
|
||||||
</developer>
|
|
||||||
|
|
||||||
<developer>
|
|
||||||
<name>David Holroyd</name>
|
|
||||||
<url>http://david.holroyd.me.uk/</url>
|
|
||||||
<roles>
|
|
||||||
<role>Originator - prior version</role>
|
|
||||||
</roles>
|
|
||||||
</developer>
|
|
||||||
|
|
||||||
<developer>
|
|
||||||
<name>Kenny MacDermid</name>
|
|
||||||
<url>mailto:kenny "at" kmdconsulting.ca</url>
|
|
||||||
<roles>
|
|
||||||
<role>Contributor - prior versions</role>
|
|
||||||
</roles>
|
|
||||||
</developer>
|
|
||||||
|
|
||||||
</developers>
|
|
||||||
|
|
||||||
<!-- Location of the license description for this project
|
|
||||||
-->
|
|
||||||
<licenses>
|
|
||||||
<license>
|
|
||||||
<distribution>repo</distribution>
|
|
||||||
<name>The BSD License</name>
|
|
||||||
<url>http://www.antlr.org/LICENSE.txt </url>
|
|
||||||
</license>
|
|
||||||
</licenses>
|
|
||||||
|
|
||||||
<distributionManagement>
|
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>antlr-repo</id>
|
|
||||||
<name>ANTLR Testing repository</name>
|
|
||||||
<url>scpexe://antlr.org/home/mavensync/antlr-repo</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<snapshotRepository>
|
|
||||||
<id>antlr-snapshot</id>
|
|
||||||
<name>ANTLR Testing Snapshot Repository</name>
|
|
||||||
<url>scpexe://antlr.org/home/mavensync/antlr-snapshot</url>
|
|
||||||
</snapshotRepository>
|
|
||||||
|
|
||||||
<site>
|
|
||||||
<id>antlr-repo</id>
|
|
||||||
<name>ANTLR Maven Plugin Web Site</name>
|
|
||||||
<url>scpexe://antlr.org/home/mavensync/antlr-maven-webs/antlr4-maven-plugin</url>
|
|
||||||
</site>
|
|
||||||
</distributionManagement>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
|
|
||||||
Inform Maven of the ANTLR snapshot repository, which it will
|
|
||||||
need to consult to get the latest snapshot build of the runtime and tool
|
|
||||||
if it was not built and installed locally.
|
|
||||||
-->
|
|
||||||
<repositories>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
This is the ANTLR repository.
|
|
||||||
-->
|
|
||||||
<repository>
|
|
||||||
<id>antlr-snapshot</id>
|
|
||||||
<name>ANTLR Testing Snapshot Repository</name>
|
|
||||||
<url>http://antlr.org/antlr-snapshot</url>
|
|
||||||
<snapshots>
|
|
||||||
<enabled>true</enabled>
|
|
||||||
<updatePolicy>always</updatePolicy>
|
|
||||||
</snapshots>
|
|
||||||
|
|
||||||
<releases>
|
|
||||||
<enabled>false</enabled>
|
|
||||||
</releases>
|
|
||||||
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
</repositories>
|
|
||||||
|
|
||||||
<!-- Ancilliary information for completeness
|
<!-- Ancilliary information for completeness
|
||||||
-->
|
-->
|
||||||
<inceptionYear>2009</inceptionYear>
|
<inceptionYear>2009</inceptionYear>
|
||||||
|
|
||||||
<mailingLists>
|
|
||||||
<mailingList>
|
|
||||||
<archive>http://antlr.markmail.org/</archive>
|
|
||||||
<otherArchives>
|
|
||||||
<otherArchive>http://www.antlr.org/pipermail/antlr-interest/</otherArchive>
|
|
||||||
</otherArchives>
|
|
||||||
<name>ANTLR Users</name>
|
|
||||||
<subscribe>http://www.antlr.org/mailman/listinfo/antlr-interest/</subscribe>
|
|
||||||
<unsubscribe>http://www.antlr.org/mailman/options/antlr-interest/</unsubscribe>
|
|
||||||
<post>antlr-interest@antlr.org</post>
|
|
||||||
</mailingList>
|
|
||||||
</mailingLists>
|
|
||||||
|
|
||||||
<organization>
|
|
||||||
<name>ANTLR.org</name>
|
|
||||||
<url>http://www.antlr.org</url>
|
|
||||||
</organization>
|
|
||||||
<!-- ============================================================================= -->
|
<!-- ============================================================================= -->
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
@ -253,30 +134,8 @@
|
||||||
|
|
||||||
<defaultGoal>install</defaultGoal>
|
<defaultGoal>install</defaultGoal>
|
||||||
|
|
||||||
<extensions>
|
|
||||||
<extension>
|
|
||||||
<groupId>org.apache.maven.wagon</groupId>
|
|
||||||
<artifactId>wagon-ssh-external</artifactId>
|
|
||||||
<version>2.2</version>
|
|
||||||
</extension>
|
|
||||||
</extensions>
|
|
||||||
|
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
|
||||||
<version>2.5.1</version>
|
|
||||||
<configuration>
|
|
||||||
<source>1.6</source>
|
|
||||||
<target>1.6</target>
|
|
||||||
<showDeprecation>true</showDeprecation>
|
|
||||||
<showWarnings>true</showWarnings>
|
|
||||||
<compilerArguments>
|
|
||||||
<Xlint/>
|
|
||||||
</compilerArguments>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-plugin-plugin</artifactId>
|
<artifactId>maven-plugin-plugin</artifactId>
|
||||||
|
@ -316,34 +175,6 @@
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-source-plugin</artifactId>
|
|
||||||
<version>2.2.1</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>attach-sources</id>
|
|
||||||
<goals>
|
|
||||||
<goal>jar</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-javadoc-plugin</artifactId>
|
|
||||||
<version>2.9</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>attach-javadocs</id>
|
|
||||||
<goals>
|
|
||||||
<goal>jar</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
</plugins>
|
</plugins>
|
||||||
|
|
||||||
</build>
|
</build>
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
/**
|
/*
|
||||||
[The "BSD licence"]
|
[The "BSD license"]
|
||||||
|
Copyright (c) 2012 Terence Parr
|
||||||
ANTLR - Copyright (c) 2005-2008 Terence Parr
|
Copyright (c) 2012 Sam Harwell
|
||||||
Maven Plugin - Copyright (c) 2009 Jim Idle
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -30,31 +28,35 @@
|
||||||
*/
|
*/
|
||||||
package org.antlr.mojo.antlr4;
|
package org.antlr.mojo.antlr4;
|
||||||
|
|
||||||
|
import org.antlr.v4.runtime.misc.NotNull;
|
||||||
import org.antlr.v4.tool.ANTLRMessage;
|
import org.antlr.v4.tool.ANTLRMessage;
|
||||||
import org.antlr.v4.tool.ANTLRToolListener;
|
import org.antlr.v4.tool.ANTLRToolListener;
|
||||||
import org.apache.maven.plugin.logging.Log;
|
import org.apache.maven.plugin.logging.Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Maven plexus container gives us a Log logging provider
|
* This implementation of {@link ANTLRToolListener} reports messages to the
|
||||||
* which we can use to install an error listener for the ANTLR
|
* {@link Log} instance provided by Maven.
|
||||||
* tool to report errors by.
|
*
|
||||||
|
* @author Sam Harwell
|
||||||
*/
|
*/
|
||||||
public class Antlr4ErrorLog implements ANTLRToolListener {
|
public class Antlr4ErrorLog implements ANTLRToolListener {
|
||||||
|
|
||||||
private Log log;
|
private final Log log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiate an ANTLR ErrorListner that communicates any messages
|
* Creates an instance of {@link Antlr4ErrorLog}.
|
||||||
* it receives to the Maven error sink.
|
|
||||||
*
|
*
|
||||||
* @param log The Maven Error Log
|
* @param log The Maven log
|
||||||
*/
|
*/
|
||||||
public Antlr4ErrorLog(Log log) {
|
public Antlr4ErrorLog(@NotNull Log log) {
|
||||||
this.log = log;
|
this.log = log;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends an informational message to the Maven log sink.
|
* {@inheritDoc}
|
||||||
|
* <p/>
|
||||||
|
* This implementation passes the message to the Maven log.
|
||||||
|
*
|
||||||
* @param message The message to send to Maven
|
* @param message The message to send to Maven
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@ -63,7 +65,9 @@ public class Antlr4ErrorLog implements ANTLRToolListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends an error message from ANTLR analysis to the Maven Log sink.
|
* {@inheritDoc}
|
||||||
|
* <p/>
|
||||||
|
* This implementation passes the message to the Maven log.
|
||||||
*
|
*
|
||||||
* @param message The message to send to Maven.
|
* @param message The message to send to Maven.
|
||||||
*/
|
*/
|
||||||
|
@ -73,7 +77,9 @@ public class Antlr4ErrorLog implements ANTLRToolListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends a warning message to the Maven log sink.
|
* {@inheritDoc}
|
||||||
|
* <p/>
|
||||||
|
* This implementation passes the message to the Maven log.
|
||||||
*
|
*
|
||||||
* @param message
|
* @param message
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
/**
|
/*
|
||||||
[The "BSD licence"]
|
[The "BSD license"]
|
||||||
|
Copyright (c) 2012 Terence Parr
|
||||||
ANTLR - Copyright (c) 2005-2008 Terence Parr
|
Copyright (c) 2012 Sam Harwell
|
||||||
Maven Plugin - Copyright (c) 2009 Jim Idle
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -29,15 +27,13 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ========================================================================
|
|
||||||
* This is the definitive ANTLR4 Mojo set. All other sets are belong to us.
|
|
||||||
*/
|
|
||||||
package org.antlr.mojo.antlr4;
|
package org.antlr.mojo.antlr4;
|
||||||
|
|
||||||
import antlr.RecognitionException;
|
|
||||||
import antlr.TokenStreamException;
|
|
||||||
import org.antlr.v4.Tool;
|
import org.antlr.v4.Tool;
|
||||||
import org.antlr.v4.codegen.CodeGenerator;
|
import org.antlr.v4.codegen.CodeGenerator;
|
||||||
|
import org.antlr.v4.runtime.misc.MultiMap;
|
||||||
|
import org.antlr.v4.runtime.misc.NotNull;
|
||||||
|
import org.antlr.v4.runtime.misc.Utils;
|
||||||
import org.antlr.v4.tool.Grammar;
|
import org.antlr.v4.tool.Grammar;
|
||||||
import org.apache.maven.plugin.AbstractMojo;
|
import org.apache.maven.plugin.AbstractMojo;
|
||||||
import org.apache.maven.plugin.MojoExecutionException;
|
import org.apache.maven.plugin.MojoExecutionException;
|
||||||
|
@ -62,104 +58,93 @@ import java.io.StringWriter;
|
||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Goal that picks up all the ANTLR grammars in a project and moves those that
|
* Goal that picks up all the ANTLR grammars in a project and moves those that
|
||||||
* are required for generation of the compilable sources into the location
|
* are required for generation of the compilable sources into the location
|
||||||
* that we use to compile them, such as target/generated-sources/antlr4 ...
|
* that we use to compile them, such as {@code target/generated-sources/antlr4}.
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:jimi@temporal-wave.com">Jim Idle</a>
|
* @author Sam Harwell
|
||||||
*/
|
*/
|
||||||
@Mojo(
|
@Mojo(
|
||||||
name = "antlr",
|
name = "antlr",
|
||||||
defaultPhase = LifecyclePhase.PROCESS_SOURCES,
|
defaultPhase = LifecyclePhase.PROCESS_SOURCES,
|
||||||
requiresDependencyResolution = ResolutionScope.COMPILE,
|
requiresDependencyResolution = ResolutionScope.COMPILE,
|
||||||
requiresProject = true)
|
requiresProject = true)
|
||||||
public class Antlr4Mojo
|
public class Antlr4Mojo extends AbstractMojo {
|
||||||
extends AbstractMojo {
|
|
||||||
|
|
||||||
// First, let's deal with the options that the ANTLR tool itself
|
// First, let's deal with the options that the ANTLR tool itself
|
||||||
// can be configured by.
|
// can be configured by.
|
||||||
//
|
//
|
||||||
/**
|
|
||||||
* If set to true, then after the tool has processed an input grammar file
|
|
||||||
* it will report variaous statistics about the parser, such as information
|
|
||||||
* on cyclic DFAs, which rules may use backtracking, and so on.
|
|
||||||
*/
|
|
||||||
@Parameter(defaultValue = "false")
|
|
||||||
protected boolean report;
|
|
||||||
/**
|
|
||||||
* If set to true, then the ANTLR tool will print a version of the input
|
|
||||||
* grammar which is devoid of any actions that may be present in the input file.
|
|
||||||
*/
|
|
||||||
@Parameter(defaultValue = "false")
|
|
||||||
protected boolean printGrammar;
|
|
||||||
/**
|
|
||||||
* If set to true, then the code generated by the ANTLR code generator will
|
|
||||||
* be set to debug mode. This means that when run, the code will 'hang' and
|
|
||||||
* wait for a debug connection on a TCP port (49100 by default).
|
|
||||||
*/
|
|
||||||
@Parameter(defaultValue = "false")
|
|
||||||
protected boolean debug;
|
|
||||||
/**
|
|
||||||
* If set to true, then then the generated parser will compute and report on
|
|
||||||
* profile information at runtime.
|
|
||||||
*/
|
|
||||||
@Parameter(defaultValue = "false")
|
|
||||||
protected boolean profile;
|
|
||||||
/**
|
/**
|
||||||
* If set to true then the ANTLR tool will generate a description of the atn
|
* If set to true then the ANTLR tool will generate a description of the atn
|
||||||
* for each rule in <a href="http://www.graphviz.org">Dot format</a>
|
* for each rule in <a href="http://www.graphviz.org">Dot format</a>
|
||||||
*/
|
*/
|
||||||
@Parameter(defaultValue = "false")
|
@Parameter(property = "antlr4.atn", defaultValue = "false")
|
||||||
protected boolean atn;
|
protected boolean atn;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If set to true, the generated parser code will log rule entry and exit points
|
* specify grammar file encoding; e.g., euc-jp
|
||||||
* to stdout as an aid to debugging.
|
*/
|
||||||
|
@Parameter
|
||||||
|
protected String encoding;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* generate parse tree listener (default)
|
||||||
|
*/
|
||||||
|
@Parameter(property = "antlr4.listener", defaultValue = "true")
|
||||||
|
protected boolean listener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* generate parse tree visitor
|
||||||
|
*/
|
||||||
|
@Parameter(property = "antlr4.visitor", defaultValue = "false")
|
||||||
|
protected boolean visitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* treat warnings as errors
|
||||||
|
*/
|
||||||
|
@Parameter(property = "antlr4.treatWarningsAsErrors", defaultValue = "false")
|
||||||
|
protected boolean treatWarningsAsErrors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add config set to DFA states
|
||||||
*/
|
*/
|
||||||
@Parameter(defaultValue = "false")
|
@Parameter(defaultValue = "false")
|
||||||
protected boolean trace;
|
|
||||||
/**
|
|
||||||
* If this parameter is set, it indicates that any warning or error messages returned
|
|
||||||
* by ANLTR, shoould be formatted in the specified way. Currently, ANTLR suports the
|
|
||||||
* built-in formats of antlr, gnu and vs2005.
|
|
||||||
*/
|
|
||||||
@Parameter(defaultValue = "antlr")
|
|
||||||
protected String messageFormat;
|
|
||||||
/**
|
|
||||||
* If this parameter is set to true, then ANTLR will report all sorts of things
|
|
||||||
* about what it is doing such as the names of files and the version of ANTLR and so on.
|
|
||||||
*/
|
|
||||||
@Parameter(defaultValue = "true")
|
|
||||||
protected boolean verbose;
|
|
||||||
|
|
||||||
protected boolean verbose_dfa;
|
protected boolean verbose_dfa;
|
||||||
|
|
||||||
protected boolean force_atn;
|
/**
|
||||||
|
* use the ATN simulator for all predictions
|
||||||
protected boolean abstract_recognizer;
|
*/
|
||||||
|
@Parameter(property = "antlr4.forceATN", defaultValue = "false")
|
||||||
|
protected boolean forceATN;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The number of alts, beyond which ANTLR will not generate a switch statement
|
* A list of grammar options to explicitly specify to the tool. These
|
||||||
* for the DFA.
|
* options are passed to the tool using the
|
||||||
|
* <code>-D<option>=<value></code> syntax.
|
||||||
*/
|
*/
|
||||||
@Parameter(defaultValue = "300")
|
@Parameter
|
||||||
private int maxSwitchCaseLabels;
|
protected Map<String, String> options;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The number of alts, below which ANTLR will not choose to generate a switch
|
* A list of additional command line arguments to pass to the ANTLR tool.
|
||||||
* statement over an if statement.
|
|
||||||
*/
|
*/
|
||||||
private int minSwitchAlts;
|
@Parameter
|
||||||
|
protected List<String> arguments;
|
||||||
|
|
||||||
/* --------------------------------------------------------------------
|
/* --------------------------------------------------------------------
|
||||||
* The following are Maven specific parameters, rather than specificlly
|
* The following are Maven specific parameters, rather than specificlly
|
||||||
* options that the ANTLR tool can use.
|
* options that the ANTLR tool can use.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides an explicit list of all the grammars that should
|
* Provides an explicit list of all the grammars that should
|
||||||
* be included in the generate phase of the plugin. Note that the plugin
|
* be included in the generate phase of the plugin. Note that the plugin
|
||||||
|
@ -185,25 +170,21 @@ public class Antlr4Mojo
|
||||||
*/
|
*/
|
||||||
@Parameter(property = "project", required = true, readonly = true)
|
@Parameter(property = "project", required = true, readonly = true)
|
||||||
protected MavenProject project;
|
protected MavenProject project;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies the Antlr directory containing grammar files. For
|
* Specifies the ANTLR directory containing grammar files.
|
||||||
* antlr version 4.x we default this to a directory in the tree
|
|
||||||
* called antlr4 because the antlr3 directory is occupied by version
|
|
||||||
* 3.x grammars.
|
|
||||||
*/
|
*/
|
||||||
@Parameter(defaultValue = "${basedir}/src/main/antlr4", required = true)
|
@Parameter(defaultValue = "${basedir}/src/main/antlr4", required = true)
|
||||||
private File sourceDirectory;
|
private File sourceDirectory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Location for generated Java files. For antlr version 4.x we default
|
* Specify output directory where the Java files are generated.
|
||||||
* this to a directory in the tree called antlr4 because the antlr
|
|
||||||
* directory is occupied by version 2.x grammars.
|
|
||||||
*/
|
*/
|
||||||
@Parameter(defaultValue = "${project.build.directory}/generated-sources/antlr4", required = true)
|
@Parameter(defaultValue = "${project.build.directory}/generated-sources/antlr4", required = true)
|
||||||
private File outputDirectory;
|
private File outputDirectory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Location for imported token files, e.g. <code>.tokens</code> and imported grammars.
|
* Specify location of grammars and tokens files.
|
||||||
* Note that ANTLR will not try to process grammars that it finds to be imported
|
|
||||||
* into other grammars (in the same processing session).
|
|
||||||
*/
|
*/
|
||||||
@Parameter(defaultValue = "${basedir}/src/main/antlr4/imports")
|
@Parameter(defaultValue = "${basedir}/src/main/antlr4/imports")
|
||||||
private File libDirectory;
|
private File libDirectory;
|
||||||
|
@ -223,6 +204,7 @@ public class Antlr4Mojo
|
||||||
void addSourceRoot(File outputDir) {
|
void addSourceRoot(File outputDir) {
|
||||||
project.addCompileSourceRoot(outputDir.getPath());
|
project.addCompileSourceRoot(outputDir.getPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An instance of the ANTLR tool build
|
* An instance of the ANTLR tool build
|
||||||
*/
|
*/
|
||||||
|
@ -232,12 +214,11 @@ public class Antlr4Mojo
|
||||||
* The main entry point for this Mojo, it is responsible for converting
|
* The main entry point for this Mojo, it is responsible for converting
|
||||||
* ANTLR 4.x grammars into the target language specified by the grammar.
|
* ANTLR 4.x grammars into the target language specified by the grammar.
|
||||||
*
|
*
|
||||||
* @throws org.apache.maven.plugin.MojoExecutionException When something is disvocered such as a missing source
|
* @throws MojoExecutionException When something is discovered such as a missing source
|
||||||
* @throws org.apache.maven.plugin.MojoFailureException When something really bad happesn such as not being able to create the ANTLR Tool
|
* @throws MojoFailureException When something really bad happens such as not being able to create the ANTLR Tool
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void execute()
|
public void execute() throws MojoExecutionException, MojoFailureException {
|
||||||
throws MojoExecutionException, MojoFailureException {
|
|
||||||
|
|
||||||
Log log = getLog();
|
Log log = getLog();
|
||||||
|
|
||||||
|
@ -268,16 +249,11 @@ public class Antlr4Mojo
|
||||||
|
|
||||||
// Flags
|
// Flags
|
||||||
//
|
//
|
||||||
log.debug("ANTLR: report : " + report);
|
}
|
||||||
log.debug("ANTLR: printGrammar : " + printGrammar);
|
|
||||||
log.debug("ANTLR: debug : " + debug);
|
if (!sourceDirectory.isDirectory()) {
|
||||||
log.debug("ANTLR: profile : " + profile);
|
log.info("No ANTLR 4 grammars to compile in " + sourceDirectory.getAbsolutePath());
|
||||||
log.debug("ANTLR: atn : " + atn);
|
return;
|
||||||
log.debug("ANTLR: trace : " + trace);
|
|
||||||
log.debug("ANTLR: messageFormat : " + messageFormat);
|
|
||||||
log.debug("ANTLR: maxSwitchCaseLabels : " + maxSwitchCaseLabels);
|
|
||||||
log.debug("ANTLR: minSwitchAlts : " + minSwitchAlts);
|
|
||||||
log.debug("ANTLR: verbose : " + verbose);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure that the output directory path is all in tact so that
|
// Ensure that the output directory path is all in tact so that
|
||||||
|
@ -289,73 +265,218 @@ public class Antlr4Mojo
|
||||||
outputDir.mkdirs();
|
outputDir.mkdirs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Now pick up all the files and process them with the Tool
|
||||||
|
//
|
||||||
|
|
||||||
|
List<List<String>> argumentSets;
|
||||||
|
try {
|
||||||
|
List<String> args = getCommandArguments();
|
||||||
|
argumentSets = processGrammarFiles(args, sourceDirectory);
|
||||||
|
} catch (InclusionScanException ie) {
|
||||||
|
log.error(ie);
|
||||||
|
throw new MojoExecutionException("Fatal error occured while evaluating the names of the grammar files to analyze", ie);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug("Output directory base will be " + outputDirectory.getAbsolutePath());
|
||||||
|
log.info("ANTLR 4: Processing source directory " + sourceDirectory.getAbsolutePath());
|
||||||
|
for (List<String> args : argumentSets) {
|
||||||
|
try {
|
||||||
|
// Create an instance of the ANTLR 4 build tool
|
||||||
|
tool = new CustomTool(args.toArray(new String[args.size()]));
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("The attempt to create the ANTLR 4 build tool failed, see exception report for details", e);
|
||||||
|
throw new MojoFailureException("Error creating an instanceof the ANTLR tool.", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set working directory for ANTLR to be the base source directory
|
||||||
|
tool.inputDirectory = sourceDirectory;
|
||||||
|
|
||||||
|
tool.processGrammarsOnCommandLine();
|
||||||
|
|
||||||
|
// If any of the grammar files caused errors but did nto throw exceptions
|
||||||
|
// then we should have accumulated errors in the counts
|
||||||
|
if (tool.getNumErrors() > 0) {
|
||||||
|
throw new MojoExecutionException("ANTLR 4 caught " + tool.getNumErrors() + " build errors.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (project != null) {
|
||||||
|
// Tell Maven that there are some new source files underneath the output directory.
|
||||||
|
addSourceRoot(this.getOutputDirectory());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getCommandArguments() {
|
||||||
List<String> args = new ArrayList<String>();
|
List<String> args = new ArrayList<String>();
|
||||||
|
|
||||||
if (getOutputDirectory() != null) {
|
if (getOutputDirectory() != null) {
|
||||||
args.add("-o");
|
args.add("-o");
|
||||||
args.add(outputDir.getAbsolutePath());
|
args.add(outputDirectory.getAbsolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Where do we want ANTLR to look for .tokens and import grammars?
|
// Where do we want ANTLR to look for .tokens and import grammars?
|
||||||
//
|
if (getLibDirectory() != null && getLibDirectory().isDirectory()) {
|
||||||
if (getLibDirectory() != null && getLibDirectory().exists()) {
|
|
||||||
args.add("-lib");
|
args.add("-lib");
|
||||||
args.add(libDirectory.getAbsolutePath());
|
args.add(libDirectory.getAbsolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next we need to set the options given to us in the pom into the
|
// Next we need to set the options given to us in the pom into the
|
||||||
// tool instance we have created.
|
// tool instance we have created.
|
||||||
//
|
|
||||||
if (debug) {
|
|
||||||
args.add("-debug");
|
|
||||||
}
|
|
||||||
if (atn) {
|
if (atn) {
|
||||||
args.add("-atn");
|
args.add("-atn");
|
||||||
}
|
}
|
||||||
if (profile) {
|
|
||||||
args.add("-profile");
|
if (encoding != null && !encoding.isEmpty()) {
|
||||||
|
args.add("-encoding");
|
||||||
|
args.add(encoding);
|
||||||
}
|
}
|
||||||
if (report) {
|
|
||||||
args.add("-report");
|
if (listener) {
|
||||||
|
args.add("-listener");
|
||||||
}
|
}
|
||||||
if (printGrammar) {
|
else {
|
||||||
args.add("-print");
|
args.add("-no-listener");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (visitor) {
|
||||||
|
args.add("-visitor");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
args.add("-no-visitor");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (treatWarningsAsErrors) {
|
||||||
|
args.add("-Werror");
|
||||||
|
}
|
||||||
|
|
||||||
if (verbose_dfa) {
|
if (verbose_dfa) {
|
||||||
args.add("-Xverbose-dfa");
|
args.add("-Xverbose-dfa");
|
||||||
}
|
}
|
||||||
if (messageFormat != null && !"".equals(messageFormat)) {
|
|
||||||
args.add("-message-format");
|
if (forceATN) {
|
||||||
args.add(messageFormat);
|
|
||||||
}
|
|
||||||
if (force_atn) {
|
|
||||||
args.add("-Xforce-atn");
|
args.add("-Xforce-atn");
|
||||||
}
|
}
|
||||||
if (abstract_recognizer) {
|
|
||||||
args.add("-abstract");
|
if (options != null) {
|
||||||
|
for (Map.Entry<String, String> option : options.entrySet()) {
|
||||||
|
args.add(String.format("-D%s=%s", option.getKey(), option.getValue()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
if (arguments != null) {
|
||||||
|
args.addAll(arguments);
|
||||||
// Now pick up all the files and process them with the Tool
|
|
||||||
//
|
|
||||||
processGrammarFiles(args, sourceDirectory, outputDirectory);
|
|
||||||
|
|
||||||
} catch (InclusionScanException ie) {
|
|
||||||
|
|
||||||
log.error(ie);
|
|
||||||
throw new MojoExecutionException("Fatal error occured while evaluating the names of the grammar files to analyze");
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
|
|
||||||
getLog().error(e);
|
|
||||||
throw new MojoExecutionException(e.getMessage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create an instance of the ANTLR 4 build tool
|
return args;
|
||||||
//
|
}
|
||||||
try {
|
|
||||||
tool = new Tool(args.toArray(new String[args.size()])) {
|
/**
|
||||||
|
*
|
||||||
|
* @param sourceDirectory
|
||||||
|
* @throws org.codehaus.plexus.compiler.util.scan.InclusionScanException
|
||||||
|
*/
|
||||||
|
@NotNull
|
||||||
|
private List<List<String>> processGrammarFiles(List<String> args, File sourceDirectory) throws InclusionScanException {
|
||||||
|
// Which files under the source set should we be looking for as grammar files
|
||||||
|
SourceMapping mapping = new SuffixMapping("g4", Collections.<String>emptySet());
|
||||||
|
|
||||||
|
// What are the sets of includes (defaulted or otherwise).
|
||||||
|
Set<String> includes = getIncludesPatterns();
|
||||||
|
|
||||||
|
// Now, to the excludes, we need to add the imports directory
|
||||||
|
// as this is autoscanned for imported grammars and so is auto-excluded from the
|
||||||
|
// set of grammar fields we should be analyzing.
|
||||||
|
excludes.add("imports/**");
|
||||||
|
|
||||||
|
SourceInclusionScanner scan = new SimpleSourceInclusionScanner(includes, excludes);
|
||||||
|
scan.addSourceMapping(mapping);
|
||||||
|
Set<File> grammarFiles = scan.getIncludedSources(sourceDirectory, null);
|
||||||
|
|
||||||
|
if (grammarFiles.isEmpty()) {
|
||||||
|
getLog().info("No grammars to process");
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
MultiMap<String, File> grammarFileByFolder = new MultiMap<String, File>();
|
||||||
|
// Iterate each grammar file we were given and add it into the tool's list of
|
||||||
|
// grammars to process.
|
||||||
|
for (File grammarFile : grammarFiles) {
|
||||||
|
getLog().debug("Grammar file '" + grammarFile.getPath() + "' detected.");
|
||||||
|
|
||||||
|
String relPathBase = findSourceSubdir(sourceDirectory, grammarFile.getPath());
|
||||||
|
String relPath = relPathBase + grammarFile.getName();
|
||||||
|
getLog().debug(" ... relative path is: " + relPath);
|
||||||
|
|
||||||
|
grammarFileByFolder.map(relPathBase, grammarFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<List<String>> result = new ArrayList<List<String>>();
|
||||||
|
for (Map.Entry<String, List<File>> entry : grammarFileByFolder.entrySet()) {
|
||||||
|
List<String> folderArgs = new ArrayList<String>(args);
|
||||||
|
if (!folderArgs.contains("-package")) {
|
||||||
|
folderArgs.add("-package");
|
||||||
|
folderArgs.add(getPackageName(entry.getKey()));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (File file : entry.getValue()) {
|
||||||
|
folderArgs.add(entry.getKey() + file.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
result.add(folderArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getPackageName(String relativeFolderPath) {
|
||||||
|
if (relativeFolderPath.contains("..")) {
|
||||||
|
throw new UnsupportedOperationException("Cannot handle relative paths containing '..'");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> parts = new ArrayList<String>(Arrays.asList(relativeFolderPath.split("[/\\\\\\.]+")));
|
||||||
|
while (parts.remove("")) {
|
||||||
|
// intentionally blank
|
||||||
|
}
|
||||||
|
|
||||||
|
return Utils.join(parts.iterator(), ".");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getIncludesPatterns() {
|
||||||
|
if (includes == null || includes.isEmpty()) {
|
||||||
|
return Collections.singleton("**/*.g4");
|
||||||
|
}
|
||||||
|
return includes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given the source directory File object and the full PATH to a grammar,
|
||||||
|
* produce the path to the named grammar file in relative terms to the
|
||||||
|
* {@code sourceDirectory}. This will then allow ANTLR to produce output
|
||||||
|
* relative to the base of the output directory and reflect the input
|
||||||
|
* organization of the grammar files.
|
||||||
|
*
|
||||||
|
* @param sourceDirectory The source directory File object
|
||||||
|
* @param grammarFileName The full path to the input grammar file
|
||||||
|
* @return The path to the grammar file relative to the source directory
|
||||||
|
*/
|
||||||
|
private String findSourceSubdir(File sourceDirectory, String grammarFileName) {
|
||||||
|
String srcPath = sourceDirectory.getPath() + File.separator;
|
||||||
|
|
||||||
|
if (!grammarFileName.startsWith(srcPath)) {
|
||||||
|
throw new IllegalArgumentException("expected " + grammarFileName + " to be prefixed with " + sourceDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
|
File unprefixedGrammarFileName = new File(grammarFileName.substring(srcPath.length()));
|
||||||
|
|
||||||
|
return unprefixedGrammarFileName.getParent() + File.separator;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final class CustomTool extends Tool {
|
||||||
|
|
||||||
|
public CustomTool(String[] args) {
|
||||||
|
super(args);
|
||||||
|
addListener(new Antlr4ErrorLog(getLog()));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(Grammar g, boolean gencode) {
|
public void process(Grammar g, boolean gencode) {
|
||||||
|
@ -387,171 +508,9 @@ public class Antlr4Mojo
|
||||||
}
|
}
|
||||||
|
|
||||||
URI relativePath = project.getBasedir().toURI().relativize(outputFile.toURI());
|
URI relativePath = project.getBasedir().toURI().relativize(outputFile.toURI());
|
||||||
getLog().info(" Writing file: " + relativePath);
|
getLog().debug(" Writing file: " + relativePath);
|
||||||
FileWriter fw = new FileWriter(outputFile);
|
FileWriter fw = new FileWriter(outputFile);
|
||||||
return new BufferedWriter(fw);
|
return new BufferedWriter(fw);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
|
||||||
tool.addListener(new Antlr4ErrorLog(log));
|
|
||||||
|
|
||||||
// we set some options directly
|
|
||||||
tool.trace = trace;
|
|
||||||
|
|
||||||
// Where do we want ANTLR to produce its output? (Base directory)
|
|
||||||
//
|
|
||||||
if (log.isDebugEnabled())
|
|
||||||
{
|
|
||||||
log.debug("Output directory base will be " + outputDirectory.getAbsolutePath());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tell ANTLR that we always want the output files to be produced in the output directory
|
|
||||||
// using the same relative path as the input file was to the input directory.
|
|
||||||
//
|
|
||||||
// tool.setForceRelativeOutput(true);
|
|
||||||
|
|
||||||
// Set working directory for ANTLR to be the base source directory
|
|
||||||
//
|
|
||||||
tool.inputDirectory = sourceDirectory;
|
|
||||||
|
|
||||||
if (!sourceDirectory.exists()) {
|
|
||||||
if (log.isInfoEnabled()) {
|
|
||||||
log.info("No ANTLR 4 grammars to compile in " + sourceDirectory.getAbsolutePath());
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
if (log.isInfoEnabled()) {
|
|
||||||
log.info("ANTLR 4: Processing source directory " + sourceDirectory.getAbsolutePath());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("The attempt to create the ANTLR 4 build tool failed, see exception report for details", e);
|
|
||||||
|
|
||||||
throw new MojoFailureException("Jim failed you!");
|
|
||||||
}
|
|
||||||
|
|
||||||
tool.processGrammarsOnCommandLine();
|
|
||||||
|
|
||||||
// If any of the grammar files caused errors but did nto throw exceptions
|
|
||||||
// then we should have accumulated errors in the counts
|
|
||||||
//
|
|
||||||
if (tool.getNumErrors() > 0) {
|
|
||||||
throw new MojoExecutionException("ANTLR 4 caught " + tool.getNumErrors() + " build errors.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// All looks good, so we need to tel Maven about the sources that
|
|
||||||
// we just created.
|
|
||||||
//
|
|
||||||
if (project != null) {
|
|
||||||
// Tell Maven that there are some new source files underneath
|
|
||||||
// the output directory.
|
|
||||||
//
|
|
||||||
addSourceRoot(this.getOutputDirectory());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param sourceDirectory
|
|
||||||
* @param outputDirectory
|
|
||||||
* @throws antlr.TokenStreamException
|
|
||||||
* @throws antlr.RecognitionException
|
|
||||||
* @throws java.io.IOException
|
|
||||||
* @throws org.codehaus.plexus.compiler.util.scan.InclusionScanException
|
|
||||||
*/
|
|
||||||
private void processGrammarFiles(List<String> args, File sourceDirectory, File outputDirectory)
|
|
||||||
throws TokenStreamException, RecognitionException, IOException, InclusionScanException {
|
|
||||||
// Which files under the source set should we be looking for as grammar files
|
|
||||||
//
|
|
||||||
SourceMapping mapping = new SuffixMapping("g4", Collections.<String>emptySet());
|
|
||||||
|
|
||||||
// What are the sets of includes (defaulted or otherwise).
|
|
||||||
//
|
|
||||||
Set<String> includes = getIncludesPatterns();
|
|
||||||
|
|
||||||
// Now, to the excludes, we need to add the imports directory
|
|
||||||
// as this is autoscanned for importd grammars and so is auto-excluded from the
|
|
||||||
// set of gramamr fiels we shuold be analyzing.
|
|
||||||
//
|
|
||||||
excludes.add("imports/**");
|
|
||||||
|
|
||||||
SourceInclusionScanner scan = new SimpleSourceInclusionScanner(includes, excludes);
|
|
||||||
|
|
||||||
scan.addSourceMapping(mapping);
|
|
||||||
Set<?> grammarFiles = scan.getIncludedSources(sourceDirectory, null);
|
|
||||||
|
|
||||||
if (grammarFiles.isEmpty()) {
|
|
||||||
if (getLog().isInfoEnabled()) {
|
|
||||||
getLog().info("No grammars to process");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// Tell the ANTLR tool that we want sorted build mode
|
|
||||||
//
|
|
||||||
// tool.setMake(true);
|
|
||||||
|
|
||||||
// Iterate each grammar file we were given and add it into the tool's list of
|
|
||||||
// grammars to process.
|
|
||||||
//
|
|
||||||
for (Object grammarObject : grammarFiles) {
|
|
||||||
if (!(grammarObject instanceof File)) {
|
|
||||||
getLog().error(String.format("Expected %s from %s.getIncludedSources, found %s.",
|
|
||||||
File.class.getName(),
|
|
||||||
grammarObject != null ? grammarObject.getClass().getName() : "null"));
|
|
||||||
}
|
|
||||||
|
|
||||||
File grammarFile = (File)grammarObject;
|
|
||||||
|
|
||||||
if (getLog().isDebugEnabled()) {
|
|
||||||
getLog().debug("Grammar file '" + grammarFile.getPath() + "' detected.");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
String relPath = findSourceSubdir(sourceDirectory, grammarFile.getPath()) + grammarFile.getName();
|
|
||||||
|
|
||||||
if (getLog().isDebugEnabled()) {
|
|
||||||
getLog().debug(" ... relative path is: " + relPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
args.add(relPath);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public Set<String> getIncludesPatterns() {
|
|
||||||
if (includes == null || includes.isEmpty()) {
|
|
||||||
return Collections.singleton("**/*.g4");
|
|
||||||
}
|
|
||||||
return includes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Given the source directory File object and the full PATH to a
|
|
||||||
* grammar, produce the path to the named grammar file in relative
|
|
||||||
* terms to the sourceDirectory. This will then allow ANTLR to
|
|
||||||
* produce output relative to the base of the output directory and
|
|
||||||
* reflect the input organization of the grammar files.
|
|
||||||
*
|
|
||||||
* @param sourceDirectory The source directory File object
|
|
||||||
* @param grammarFileName The full path to the input grammar file
|
|
||||||
* @return The path to the grammar file relative to the source directory
|
|
||||||
*/
|
|
||||||
private String findSourceSubdir(File sourceDirectory, String grammarFileName) {
|
|
||||||
String srcPath = sourceDirectory.getPath() + File.separator;
|
|
||||||
|
|
||||||
if (!grammarFileName.startsWith(srcPath)) {
|
|
||||||
throw new IllegalArgumentException("expected " + grammarFileName + " to be prefixed with " + sourceDirectory);
|
|
||||||
}
|
|
||||||
|
|
||||||
File unprefixedGrammarFileName = new File(grammarFileName.substring(srcPath.length()));
|
|
||||||
|
|
||||||
return unprefixedGrammarFileName.getParent() + File.separator;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
145
pom.xml
145
pom.xml
|
@ -1,6 +1,12 @@
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.sonatype.oss</groupId>
|
||||||
|
<artifactId>oss-parent</artifactId>
|
||||||
|
<version>7</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.antlr</groupId>
|
<groupId>org.antlr</groupId>
|
||||||
<artifactId>project</artifactId>
|
<artifactId>project</artifactId>
|
||||||
|
@ -8,8 +14,37 @@
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<name>ANTLR 4</name>
|
<name>ANTLR 4</name>
|
||||||
|
<description>ANTLR 4 Master Build POM</description>
|
||||||
<url>http://www.antlr.org</url>
|
<url>http://www.antlr.org</url>
|
||||||
|
|
||||||
|
<licenses>
|
||||||
|
<license>
|
||||||
|
<name>The BSD License</name>
|
||||||
|
<url>http://www.antlr.org/license.html</url>
|
||||||
|
<distribution>repo</distribution>
|
||||||
|
</license>
|
||||||
|
</licenses>
|
||||||
|
|
||||||
|
<developers>
|
||||||
|
|
||||||
|
<developer>
|
||||||
|
<name>Terence Parr</name>
|
||||||
|
<url>http://antlr.org/wiki/display/~admin/Home</url>
|
||||||
|
<roles>
|
||||||
|
<role>Project lead - ANTLR</role>
|
||||||
|
</roles>
|
||||||
|
</developer>
|
||||||
|
|
||||||
|
<developer>
|
||||||
|
<name>Sam Harwell</name>
|
||||||
|
<url>http://tunnelvisionlabs.com</url>
|
||||||
|
<roles>
|
||||||
|
<role>Developer</role>
|
||||||
|
</roles>
|
||||||
|
</developer>
|
||||||
|
|
||||||
|
</developers>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
<module>runtime/Java</module>
|
<module>runtime/Java</module>
|
||||||
<module>tool</module>
|
<module>tool</module>
|
||||||
|
@ -19,6 +54,10 @@
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
|
<java5.home>${env.JAVA5_HOME}</java5.home>
|
||||||
|
<java6.home>${env.JAVA6_HOME}</java6.home>
|
||||||
|
<bootclasspath.compile>${java6.home}/jre/lib/rt.jar</bootclasspath.compile>
|
||||||
|
<bootclasspath.testCompile>${java6.home}/jre/lib/rt.jar</bootclasspath.testCompile>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<issueManagement>
|
<issueManagement>
|
||||||
|
@ -27,16 +66,106 @@
|
||||||
</issueManagement>
|
</issueManagement>
|
||||||
|
|
||||||
<scm>
|
<scm>
|
||||||
<url>https://github.com/antlr/antlr4</url>
|
<url>git://github.com/antlr/antlr4.git</url>
|
||||||
<connection>scm:git:git://github.com/antlr/antlr4.git</connection>
|
<connection>scm:git:git://github.com/antlr/antlr4.git</connection>
|
||||||
|
<developerConnection>scm:git:git@github.com:antlr/antlr4.git</developerConnection>
|
||||||
</scm>
|
</scm>
|
||||||
|
|
||||||
<repositories>
|
<build>
|
||||||
<repository>
|
<plugins>
|
||||||
<id>antlr.snapshots</id>
|
<plugin>
|
||||||
<name>ANTLR Snapshots Repository</name>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<url>http://antlr.org/antlr-snapshot</url>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
</repository>
|
<version>3.0</version>
|
||||||
</repositories>
|
<configuration>
|
||||||
|
<sourceDirectory>src</sourceDirectory>
|
||||||
|
<showWarnings>true</showWarnings>
|
||||||
|
<showDeprecation>true</showDeprecation>
|
||||||
|
</configuration>
|
||||||
|
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>default-compile</id>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
<compilerArgument>-Xlint:-serial</compilerArgument>
|
||||||
|
<compilerArguments>
|
||||||
|
<bootclasspath>${bootclasspath.compile}</bootclasspath>
|
||||||
|
<Xlint/>
|
||||||
|
</compilerArguments>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>default-testCompile</id>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
<compilerArgument>-Xlint:-serial</compilerArgument>
|
||||||
|
<compilerArguments>
|
||||||
|
<bootclasspath>${bootclasspath.testCompile}</bootclasspath>
|
||||||
|
<Xlint/>
|
||||||
|
</compilerArguments>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-source-plugin</artifactId>
|
||||||
|
<version>2.2.1</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>attach-sources</id>
|
||||||
|
<goals>
|
||||||
|
<goal>jar</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
<version>2.9</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>attach-javadocs</id>
|
||||||
|
<goals>
|
||||||
|
<goal>jar</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
<version>2.4</version>
|
||||||
|
<configuration>
|
||||||
|
<archive>
|
||||||
|
<manifest>
|
||||||
|
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
|
||||||
|
</manifest>
|
||||||
|
</archive>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-gpg-plugin</artifactId>
|
||||||
|
<version>1.4</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>sign-artifacts</id>
|
||||||
|
<phase>verify</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>sign</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
<artifactId>antlr4-runtime</artifactId>
|
<artifactId>antlr4-runtime</artifactId>
|
||||||
|
|
||||||
<name>ANTLR 4 Runtime</name>
|
<name>ANTLR 4 Runtime</name>
|
||||||
|
<description>The ANTLR 4 Runtime</description>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -28,50 +29,6 @@
|
||||||
<sourceDirectory>src</sourceDirectory>
|
<sourceDirectory>src</sourceDirectory>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
|
||||||
<version>2.5.1</version>
|
|
||||||
<configuration>
|
|
||||||
<source>1.6</source>
|
|
||||||
<target>1.6</target>
|
|
||||||
<showWarnings>true</showWarnings>
|
|
||||||
<showDeprecation>true</showDeprecation>
|
|
||||||
<compilerArguments>
|
|
||||||
<Xlint/>
|
|
||||||
</compilerArguments>
|
|
||||||
<compilerArgument>-Xlint:-serial</compilerArgument>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-source-plugin</artifactId>
|
|
||||||
<version>2.2.1</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>attach-sources</id>
|
|
||||||
<goals>
|
|
||||||
<goal>jar</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-javadoc-plugin</artifactId>
|
|
||||||
<version>2.9</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>attach-javadocs</id>
|
|
||||||
<goals>
|
|
||||||
<goal>jar</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -45,8 +45,8 @@ public class GenHierarchy {
|
||||||
// If this is a directory, walk each file/dir in that directory
|
// If this is a directory, walk each file/dir in that directory
|
||||||
if (f.isDirectory()) {
|
if (f.isDirectory()) {
|
||||||
String flist[] = f.list();
|
String flist[] = f.list();
|
||||||
for(int i=0; i < flist.length; i++) {
|
for (String aFlist : flist) {
|
||||||
getFilenames_(new File(f, flist[i]), files);
|
getFilenames_(new File(f, aFlist), files);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
grammar T;
|
grammar T;
|
||||||
|
|
||||||
s : R ;
|
s : ID ;
|
||||||
|
|
||||||
R : 'x' EOF;
|
|
||||||
|
|
||||||
|
ID : [a-z]+ ;
|
||||||
|
|
74
tool/pom.xml
74
tool/pom.xml
|
@ -12,6 +12,7 @@
|
||||||
<artifactId>antlr4</artifactId>
|
<artifactId>antlr4</artifactId>
|
||||||
|
|
||||||
<name>ANTLR 4 Tool</name>
|
<name>ANTLR 4 Tool</name>
|
||||||
|
<description>The ANTLR 4 grammar compiler.</description>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -24,16 +25,19 @@
|
||||||
<groupId>org.antlr</groupId>
|
<groupId>org.antlr</groupId>
|
||||||
<artifactId>antlr4-runtime</artifactId>
|
<artifactId>antlr4-runtime</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.antlr</groupId>
|
<groupId>org.antlr</groupId>
|
||||||
<artifactId>antlr-runtime</artifactId>
|
<artifactId>antlr-runtime</artifactId>
|
||||||
<version>3.4.1-SNAPSHOT</version>
|
<version>3.5.1-SNAPSHOT</version>
|
||||||
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.antlr</groupId>
|
<groupId>org.antlr</groupId>
|
||||||
<artifactId>ST4</artifactId>
|
<artifactId>ST4</artifactId>
|
||||||
<version>4.0.4</version>
|
<version>4.0.7-SNAPSHOT</version>
|
||||||
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
@ -54,10 +58,37 @@
|
||||||
</testResources>
|
</testResources>
|
||||||
|
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
<inherited>false</inherited>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<minimizeJar>true</minimizeJar>
|
||||||
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||||
|
<shadedArtifactAttached>true</shadedArtifactAttached>
|
||||||
|
<createSourcesJar>true</createSourcesJar>
|
||||||
|
<transformers>
|
||||||
|
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
||||||
|
<mainClass>org.antlr.v4.Tool</mainClass>
|
||||||
|
</transformer>
|
||||||
|
</transformers>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.antlr</groupId>
|
<groupId>org.antlr</groupId>
|
||||||
<artifactId>antlr3-maven-plugin</artifactId>
|
<artifactId>antlr3-maven-plugin</artifactId>
|
||||||
<version>3.4</version>
|
<version>3.5.1-SNAPSHOT</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<sourceDirectory>src</sourceDirectory>
|
<sourceDirectory>src</sourceDirectory>
|
||||||
<verbose>true</verbose>
|
<verbose>true</verbose>
|
||||||
|
@ -71,43 +102,6 @@
|
||||||
</executions>
|
</executions>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
|
||||||
<version>2.5.1</version>
|
|
||||||
<configuration>
|
|
||||||
<source>1.6</source>
|
|
||||||
<target>1.6</target>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-source-plugin</artifactId>
|
|
||||||
<version>2.2.1</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>attach-sources</id>
|
|
||||||
<goals>
|
|
||||||
<goal>jar</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-javadoc-plugin</artifactId>
|
|
||||||
<version>2.9</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>attach-javadocs</id>
|
|
||||||
<goals>
|
|
||||||
<goal>jar</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>2.12.4</version>
|
<version>2.12.4</version>
|
||||||
|
|
|
@ -118,11 +118,6 @@ public class Tool {
|
||||||
public File inputDirectory;
|
public File inputDirectory;
|
||||||
public String outputDirectory;
|
public String outputDirectory;
|
||||||
public String libDirectory;
|
public String libDirectory;
|
||||||
public boolean report = false;
|
|
||||||
public boolean printGrammar = false;
|
|
||||||
public boolean debug = false;
|
|
||||||
public boolean profile = false;
|
|
||||||
public boolean trace = false;
|
|
||||||
public boolean generate_ATN_dot = false;
|
public boolean generate_ATN_dot = false;
|
||||||
public String grammarEncoding = null; // use default locale's encoding
|
public String grammarEncoding = null; // use default locale's encoding
|
||||||
public String msgFormat = "antlr";
|
public String msgFormat = "antlr";
|
||||||
|
@ -141,12 +136,6 @@ public class Tool {
|
||||||
public static Option[] optionDefs = {
|
public static Option[] optionDefs = {
|
||||||
new Option("outputDirectory", "-o", OptionArgType.STRING, "specify output directory where all output is generated"),
|
new Option("outputDirectory", "-o", OptionArgType.STRING, "specify output directory where all output is generated"),
|
||||||
new Option("libDirectory", "-lib", OptionArgType.STRING, "specify location of grammars, tokens files"),
|
new Option("libDirectory", "-lib", OptionArgType.STRING, "specify location of grammars, tokens files"),
|
||||||
/*
|
|
||||||
new Option("report", "-report", "print out a report about the grammar(s) processed"),
|
|
||||||
new Option("printGrammar", "-print", "print out the grammar without actions"),
|
|
||||||
new Option("debug", "-debug", "generate a parser that emits debugging events"),
|
|
||||||
new Option("profile", "-profile", "generate a parser that computes profiling information"),
|
|
||||||
*/
|
|
||||||
new Option("generate_ATN_dot", "-atn", "generate rule augmented transition network diagrams"),
|
new Option("generate_ATN_dot", "-atn", "generate rule augmented transition network diagrams"),
|
||||||
new Option("grammarEncoding", "-encoding", OptionArgType.STRING, "specify grammar file encoding; e.g., euc-jp"),
|
new Option("grammarEncoding", "-encoding", OptionArgType.STRING, "specify grammar file encoding; e.g., euc-jp"),
|
||||||
new Option("msgFormat", "-message-format", OptionArgType.STRING, "specify output style for messages in antlr, gnu, vs2005"),
|
new Option("msgFormat", "-message-format", OptionArgType.STRING, "specify output style for messages in antlr, gnu, vs2005"),
|
||||||
|
|
Loading…
Reference in New Issue