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

org.eclipse.ocl.lpg.DerivedLexStream Maven / Gradle / Ivy

/**
 * 
 *
 * Copyright (c) 2008 Open Canarias S.L. and others.
 * All rights reserved.   This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   Adolfo Sanchez-Barbudo Herrera (Open Canarias)- Initial API and implementation
 *
 * 
 *
 * $Id: DerivedLexStream.java,v 1.2 2010/05/03 09:32:32 ewillink Exp $
 */
package org.eclipse.ocl.lpg;

import lpg.runtime.LpgLexStream;


/**
 * This DerivedLexStream will be used in favour of the LpgLexStream for the 
 * OCLLexer, so that some customization are introduced and exploited by the 
 * generated OCLLexer 
 * 
 * @since 3.0
 */
public abstract class DerivedLexStream extends LpgLexStream {
	
	protected final static int ECLIPSE_TAB_VALUE = 4;	
	private BasicEnvironment environment;
	
    public DerivedLexStream(BasicEnvironment environment, String filename, int tab) throws java.io.IOException 
    {
        super(filename, tab);
        this.environment = environment;
    }

    public DerivedLexStream(BasicEnvironment environment, char[] input_chars, String filename, int tab)
    {
        super(input_chars, filename, tab);
        this.environment = environment;
    }

    public DerivedLexStream() {
    	super();
    	setTab(ECLIPSE_TAB_VALUE);
    }
    
	protected int computeErrorCode(int leftToken, int rightToken) {
		if (rightToken >= getStreamLength())
		    return EOF_CODE;
		else if (leftToken == rightToken)
		    return LEX_ERROR_CODE;
		else
			return INVALID_TOKEN_CODE;
	}
	
    /**
	 * Define the input text as a given array of characters.
     * @param inputChars the characters
     */
	public void initialize(char[] inputChars) {	
		setInputChars(inputChars);
        setStreamLength(inputChars.length);
        computeLineOffsets();
	}
	
	/**
	 * Errors generated within the lexer are redirected to the error handler if there is one.
	 * 
	 * Note that other variants of reportLexicalError and reportError either feed this one, are fed from a default implementation
	 * of this one or originate in the parser, where a ParserErrorHandler can intercept them.
	 * @since 3.0
	 */
	@Override
	public void reportLexicalError(int errorCode, int leftLoc, int rightLoc,
			int errorLeftLoc, int errorRightLoc, String[] errorInfo) {
		BasicEnvironment environment = this.environment;
		if (environment != null)
			environment.lexerError(errorCode, leftLoc, rightLoc);
		else
			super.reportLexicalError(errorCode, leftLoc, rightLoc, errorLeftLoc,
			errorRightLoc, errorInfo);
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy