blob: a1f6933512b89a6d99d1dd5c0a29efab8c5bb12a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2009 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.dom.lrparser.action;
import java.util.List;
import lpg.lpgjavaruntime.IToken;
/**
* Provides an interface to the token stream that
* can be used by the parser semantic actions.
*
* Allows the semantic actions to directly inspect the token
* stream. Used to calculate AST node offsets and for
* other purposes.
*
* TODO There are still issues with getLeftIToken() and
* getRightIToken(), they should return null when used with
* an empty rule but currently they don't.
*
* @author Mike Kucera
*/
public interface ITokenStream {
/**
* Returns the tokens that were parsed to recognized
* the currently executing rule.
*
* @returns a read-only list of tokens, will not be null but may be empty
*/
public List<IToken> getRuleTokens();
/**
* Usually equivalent to getRuleTokens().get(0); but more efficient.
*
* However, when called during an empty rule it will return the token to the
* left of the location of the empty rule.
*/
public IToken getLeftIToken();
/**
* Usually equivalent to getRuleTokens().get(getRuleTokens().size()-1); but more efficient.
*
* However, when called during an empty rule it will return the token to the
* right of the location of the empty rule.
*/
public IToken getRightIToken();
/**
* Returns the orderedTerminalSymbol field of the corresponding sym class
* generated by LPG.
*/
public String[] getOrderedTerminalSymbols();
/**
* Returns the parser's name, useful for debugging.
*/
public String getName();
}