org.codehaus.mojo.natives.parser.FortranParser Maven / Gradle / Ivy
The newest version!
/*
*
* Copyright 2002-2004 The Ant-Contrib project
*
* Licensed 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.
*/
package org.codehaus.mojo.natives.parser;
import java.io.IOException;
import java.io.Reader;
import java.util.Vector;
/**
* A parser that extracts INCLUDE statements from a Reader.
*
* @author Curt Arnold
*/
public final class FortranParser
extends AbstractParser
implements Parser
{
/**
* List of included filenames.
*/
private final Vector includes = new Vector<>();
/**
* State that starts consuming content at the beginning of a line.
*/
private final AbstractParserState newLineState;
/**
* Default constructor.
*/
public FortranParser()
{
AbstractParserState filename = new FilenameState( this, new char[] { '\'', '/' } );
AbstractParserState apos = new WhitespaceOrLetterState( this, '\'', filename );
AbstractParserState blank = new LetterState( this, ' ', apos, null );
AbstractParserState e = new CaseInsensitiveLetterState( this, 'E', blank, null );
AbstractParserState d = new CaseInsensitiveLetterState( this, 'D', e, null );
AbstractParserState u = new CaseInsensitiveLetterState( this, 'U', d, null );
AbstractParserState l = new CaseInsensitiveLetterState( this, 'L', u, null );
AbstractParserState c = new CaseInsensitiveLetterState( this, 'C', l, null );
AbstractParserState n = new CaseInsensitiveLetterState( this, 'N', c, null );
newLineState = new WhitespaceOrCaseInsensitiveLetterState( this, 'I', n );
}
/**
* Called by FilenameState at completion of file name production.
*
* @param include include file name
*/
@Override
public void addFilename( final String include )
{
includes.addElement( include );
}
/**
* Gets collection of include file names encountered in parse.
*
* @return include file names
*/
@Override
public String[] getIncludes()
{
String[] retval = new String[includes.size()];
includes.copyInto( retval );
return retval;
}
/**
* Get the state for the beginning of a new line.
*
* @return start of line state
*/
@Override
public AbstractParserState getNewLineState()
{
return newLineState;
}
/**
* Collects all included files from the content of the reader.
*
* @param reader character reader containing a FORTRAN source module
* @throws IOException throw if I/O error during parse
*/
@Override
public void parse( final Reader reader )
throws IOException
{
includes.setSize( 0 );
super.parse( reader );
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy