mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-27 01:03:45 +01:00 
			
		
		
		
	git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			79 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| /*
 | |
|  * 
 | |
|  * 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 net.sf.antcontrib.cpptasks.parser;
 | |
| import java.io.IOException;
 | |
| import java.io.Reader;
 | |
| import java.util.Vector;
 | |
| /**
 | |
|  * A parser that extracts #include statements from a Reader.
 | |
|  * 
 | |
|  * @author Adam Murdoch
 | |
|  * @author Curt Arnold
 | |
|  */
 | |
| public final class CParser extends AbstractParser implements Parser {
 | |
|     private final Vector includes = new Vector();
 | |
|     private AbstractParserState newLineState;
 | |
|     /**
 | |
|      * 
 | |
|      *  
 | |
|      */
 | |
|     public CParser() {
 | |
|         AbstractParserState quote = new FilenameState(this, new char[]{'"'});
 | |
|         AbstractParserState bracket = new FilenameState(this, new char[]{'>'});
 | |
|         AbstractParserState postE = new PostE(this, bracket, quote);
 | |
|         //
 | |
|         //    nclude
 | |
|         //
 | |
|         AbstractParserState e = new LetterState(this, 'e', postE, null);
 | |
|         AbstractParserState d = new LetterState(this, 'd', e, null);
 | |
|         AbstractParserState u = new LetterState(this, 'u', d, null);
 | |
|         AbstractParserState l = new LetterState(this, 'l', u, null);
 | |
|         AbstractParserState c = new LetterState(this, 'c', l, null);
 | |
|         AbstractParserState n = new LetterState(this, 'n', c, null);
 | |
|         //
 | |
|         //   mport is equivalent to nclude
 | |
|         //
 | |
|         AbstractParserState t = new LetterState(this, 't', postE, null);
 | |
|         AbstractParserState r = new LetterState(this, 'r', t, null);
 | |
|         AbstractParserState o = new LetterState(this, 'o', r, null);
 | |
|         AbstractParserState p = new LetterState(this, 'p', o, null);
 | |
|         AbstractParserState m = new LetterState(this, 'm', p, null);
 | |
|         //
 | |
|         //   switch between
 | |
|         //
 | |
|         AbstractParserState n_m = new BranchState(this, new char[]{'n', 'm'},
 | |
|                 new AbstractParserState[]{n, m}, null);
 | |
|         AbstractParserState i = new WhitespaceOrLetterState(this, 'i', n_m);
 | |
|         newLineState = new LetterState(this, '#', i, null);
 | |
|     }
 | |
|     public void addFilename(String include) {
 | |
|         includes.addElement(include);
 | |
|     }
 | |
|     public String[] getIncludes() {
 | |
|         String[] retval = new String[includes.size()];
 | |
|         includes.copyInto(retval);
 | |
|         return retval;
 | |
|     }
 | |
|     public AbstractParserState getNewLineState() {
 | |
|         return newLineState;
 | |
|     }
 | |
|     public void parse(Reader reader) throws IOException {
 | |
|         includes.setSize(0);
 | |
|         super.parse(reader);
 | |
|     }
 | |
| }
 |