All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codehaus.mojo.javacc.JavaCC Maven / Gradle / Ivy

There is a newer version: 3.1.0
Show newest version
package org.codehaus.mojo.javacc;

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file 
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, 
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 * KIND, either express or implied.  See the License for the 
 * specific language governing permissions and limitations 
 * under the License.
 */

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.codehaus.plexus.util.StringUtils;

/**
 * Provides a facade for the mojos to invoke JavaCC.
 * 
 * @author Benjamin Bentmann
 * @version $Id: JavaCC.java 7845 2008-10-05 16:49:36Z bentmann $
 * @see JavaCC Command Line Syntax
 */
class JavaCC
    extends ToolFacade
{

    /**
     * The input grammar.
     */
    private File inputFile;

    /**
     * The option OUTPUT_DIRECTORY.
     */
    private File outputDirectory;

    /**
     * The option JDK_VERSION.
     */
    private String jdkVersion;

    /**
     * The option STATIC.
     */
    private Boolean isStatic;

    /**
     * The option LOOK_AHEAD.
     */
    private Integer lookAhead;

    /**
     * The option CHOICE_AMBIGUITY_CHECK.
     */
    private Integer choiceAmbiguityCheck;

    /**
     * The option OTHER_AMBIGUITY_CHECK.
     */
    private Integer otherAmbiguityCheck;

    /**
     * The option DEBUG_PARSER.
     */
    private Boolean debugParser;

    /**
     * The option DEBUG_LOOK_AHEAD.
     */
    private Boolean debugLookAhead;

    /**
     * The option DEBUG_TOKEN_MANAGER.
     */
    private Boolean debugTokenManager;

    /**
     * The option ERROR_REPORTING.
     */
    private Boolean errorReporting;

    /**
     * The option JAVA_UNICODE_ESCAPE.
     */
    private Boolean javaUnicodeEscape;

    /**
     * The option UNICODE_INPUT.
     */
    private Boolean unicodeInput;

    /**
     * The option IGNORE_CASE.
     */
    private Boolean ignoreCase;

    /**
     * The option COMMON_TOKEN_ACTION.
     */
    private Boolean commonTokenAction;

    /**
     * The option USER_TOKEN_MANAGER.
     */
    private Boolean userTokenManager;

    /**
     * The option USER_CHAR_STREAM.
     */
    private Boolean userCharStream;

    /**
     * The option BUILD_PARSER.
     */
    private Boolean buildParser;

    /**
     * The option BUILD_TOKEN_MANAGER.
     */
    private Boolean buildTokenManager;

    /**
     * The option TOKEN_MANAGER_USES_PARSER.
     */
    private Boolean tokenManagerUsesParser;

    /**
     * The option TOKEN_EXTENDS.
     */
    private String tokenExtends;

    /**
     * The option TOKEN_FACTORY.
     */
    private String tokenFactory;

    /**
     * The option SANITY_CHECK.
     */
    private Boolean sanityCheck;

    /**
     * The option FORCE_LA_CHECK.
     */
    private Boolean forceLaCheck;

    /**
     * The option CACHE_TOKENS.
     */
    private Boolean cacheTokens;

    /**
     * The option KEEP_LINE_COLUMN.
     */
    private Boolean keepLineColumn;

    /**
     * Sets the absolute path to the grammar file to pass into JavaCC for compilation.
     * 
     * @param value The absolute path to the grammar file to pass into JavaCC for compilation.
     */
    public void setInputFile( File value )
    {
        if ( value != null && !value.isAbsolute() )
        {
            throw new IllegalArgumentException( "path is not absolute: " + value );
        }
        this.inputFile = value;
    }

    /**
     * Sets the absolute path to the output directory.
     * 
     * @param value The absolute path to the output directory for the generated parser file. If this directory does not
     *            exist yet, it is created. Note that this path should already include the desired package hierarchy
     *            because JavaCC will not append the required sub directories automatically.
     */
    public void setOutputDirectory( File value )
    {
        if ( value != null && !value.isAbsolute() )
        {
            throw new IllegalArgumentException( "path is not absolute: " + value );
        }
        this.outputDirectory = value;
    }

    /**
     * Sets the option JDK_VERSION.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setJdkVersion( String value )
    {
        this.jdkVersion = value;
    }

    /**
     * Sets the option STATIC.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setStatic( Boolean value )
    {
        this.isStatic = value;
    }

    /**
     * Sets the option LOOK_AHEAD.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setLookAhead( Integer value )
    {
        this.lookAhead = value;
    }

    /**
     * Sets the option CHOICE_AMBIGUITY_CHECK.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setChoiceAmbiguityCheck( Integer value )
    {
        this.choiceAmbiguityCheck = value;
    }

    /**
     * Sets the option OTHER_AMBIGUITY_CHECK.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setOtherAmbiguityCheck( Integer value )
    {
        this.otherAmbiguityCheck = value;
    }

    /**
     * Sets the option DEBUG_PARSER.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setDebugParser( Boolean value )
    {
        this.debugParser = value;
    }

    /**
     * Sets the option DEBUG_LOOK_AHEAD.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setDebugLookAhead( Boolean value )
    {
        this.debugLookAhead = value;
    }

    /**
     * Sets the option DEBUG_TOKEN_MANAGER.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setDebugTokenManager( Boolean value )
    {
        this.debugTokenManager = value;
    }

    /**
     * Sets the option ERROR_REPORTING.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setErrorReporting( Boolean value )
    {
        this.errorReporting = value;
    }

    /**
     * Sets the option JAVA_UNICODE_ESCAPE.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setJavaUnicodeEscape( Boolean value )
    {
        this.javaUnicodeEscape = value;
    }

    /**
     * Sets the option UNICODE_INPUT.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setUnicodeInput( Boolean value )
    {
        this.unicodeInput = value;
    }

    /**
     * Sets the option IGNORE_CASE.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setIgnoreCase( Boolean value )
    {
        this.ignoreCase = value;
    }

    /**
     * Sets the option COMMON_TOKEN_ACTION.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setCommonTokenAction( Boolean value )
    {
        this.commonTokenAction = value;
    }

    /**
     * Sets the option USER_TOKEN_MANAGER.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setUserTokenManager( Boolean value )
    {
        this.userTokenManager = value;
    }

    /**
     * Sets the option USER_CHAR_STREAM.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setUserCharStream( Boolean value )
    {
        this.userCharStream = value;
    }

    /**
     * Sets the option BUILD_PARSER.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setBuildParser( Boolean value )
    {
        this.buildParser = value;
    }

    /**
     * Sets the option BUILD_TOKEN_MANAGER.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setBuildTokenManager( Boolean value )
    {
        this.buildTokenManager = value;
    }

    /**
     * Sets the option TOKEN_MANAGER_USES_PARSER.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setTokenManagerUsesParser( Boolean value )
    {
        this.tokenManagerUsesParser = value;
    }

    /**
     * Sets the option TOKEN_EXTENDS.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setTokenExtends( String value )
    {
        this.tokenExtends = value;
    }

    /**
     * Sets the option TOKEN_FACTORY.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setTokenFactory( String value )
    {
        this.tokenFactory = value;
    }

    /**
     * Sets the option SANITY_CHECK.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setSanityCheck( Boolean value )
    {
        this.sanityCheck = value;
    }

    /**
     * Sets the option FORCE_LA_CHECK.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setForceLaCheck( Boolean value )
    {
        this.forceLaCheck = value;
    }

    /**
     * Sets the option CACHE_TOKENS.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setCacheTokens( Boolean value )
    {
        this.cacheTokens = value;
    }

    /**
     * Sets the option KEEP_LINE_COLUMN.
     * 
     * @param value The option value, may be null to use the value provided in the grammar or the default.
     */
    public void setKeepLineColumn( Boolean value )
    {
        this.keepLineColumn = value;
    }

    /**
     * {@inheritDoc}
     */
    protected int execute()
        throws Exception
    {
        String[] args = generateArguments();

        if ( this.outputDirectory != null && !this.outputDirectory.exists() )
        {
            this.outputDirectory.mkdirs();
        }

        return org.javacc.parser.Main.mainProgram( args );
    }

    /**
     * Assembles the command line arguments for the invocation of JavaCC according to the configuration.

* Note: To prevent conflicts with JavaCC options that might be set directly in the grammar file, * only those parameters that have been explicitly set are passed on the command line. * * @return A string array that represents the command line arguments to use for JavaCC. */ private String[] generateArguments() { List argsList = new ArrayList(); if ( StringUtils.isNotEmpty( this.jdkVersion ) ) { argsList.add( "-JDK_VERSION=" + this.jdkVersion ); } if ( this.lookAhead != null ) { argsList.add( "-LOOKAHEAD=" + this.lookAhead ); } if ( this.choiceAmbiguityCheck != null ) { argsList.add( "-CHOICE_AMBIGUITY_CHECK=" + this.choiceAmbiguityCheck ); } if ( this.otherAmbiguityCheck != null ) { argsList.add( "-OTHER_AMBIGUITY_CHECK=" + this.otherAmbiguityCheck ); } if ( this.isStatic != null ) { argsList.add( "-STATIC=" + this.isStatic ); } if ( this.debugParser != null ) { argsList.add( "-DEBUG_PARSER=" + this.debugParser ); } if ( this.debugLookAhead != null ) { argsList.add( "-DEBUG_LOOKAHEAD=" + this.debugLookAhead ); } if ( this.debugTokenManager != null ) { argsList.add( "-DEBUG_TOKEN_MANAGER=" + this.debugTokenManager ); } if ( this.errorReporting != null ) { argsList.add( "-ERROR_REPORTING=" + this.errorReporting ); } if ( this.javaUnicodeEscape != null ) { argsList.add( "-JAVA_UNICODE_ESCAPE=" + this.javaUnicodeEscape ); } if ( this.unicodeInput != null ) { argsList.add( "-UNICODE_INPUT=" + this.unicodeInput ); } if ( this.ignoreCase != null ) { argsList.add( "-IGNORE_CASE=" + this.ignoreCase ); } if ( this.commonTokenAction != null ) { argsList.add( "-COMMON_TOKEN_ACTION=" + this.commonTokenAction ); } if ( this.userTokenManager != null ) { argsList.add( "-USER_TOKEN_MANAGER=" + this.userTokenManager ); } if ( this.userCharStream != null ) { argsList.add( "-USER_CHAR_STREAM=" + this.userCharStream ); } if ( this.buildParser != null ) { argsList.add( "-BUILD_PARSER=" + this.buildParser ); } if ( this.buildTokenManager != null ) { argsList.add( "-BUILD_TOKEN_MANAGER=" + this.buildTokenManager ); } if ( this.tokenManagerUsesParser != null ) { argsList.add( "-TOKEN_MANAGER_USES_PARSER=" + this.tokenManagerUsesParser ); } if ( StringUtils.isNotEmpty( this.tokenExtends ) ) { argsList.add( "-TOKEN_EXTENDS=" + this.tokenExtends ); } if ( StringUtils.isNotEmpty( this.tokenFactory ) ) { argsList.add( "-TOKEN_FACTORY=" + this.tokenFactory ); } if ( this.sanityCheck != null ) { argsList.add( "-SANITY_CHECK=" + this.sanityCheck ); } if ( this.forceLaCheck != null ) { argsList.add( "-FORCE_LA_CHECK=" + this.forceLaCheck ); } if ( this.cacheTokens != null ) { argsList.add( "-CACHE_TOKENS=" + this.cacheTokens ); } if ( this.keepLineColumn != null ) { argsList.add( "-KEEP_LINE_COLUMN=" + this.keepLineColumn ); } if ( this.outputDirectory != null ) { argsList.add( "-OUTPUT_DIRECTORY=" + this.outputDirectory.getAbsolutePath() ); } if ( this.inputFile != null ) { argsList.add( this.inputFile.getAbsolutePath() ); } return (String[]) argsList.toArray( new String[argsList.size()] ); } /** * Gets a string representation of the command line arguments. * * @return A string representation of the command line arguments. */ public String toString() { return Arrays.asList( generateArguments() ).toString(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy