blob: 5889aeddc188447c730dd66f8f5c20f4fe38f87f [file] [log] [blame]
/*
*
* 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.
*
*/
package org.apache.royale.compiler.internal.parsing.as;
import org.apache.royale.compiler.problems.SyntaxProblem;
/**
* Interface for the stream of tokens that will be passed to the parser. This
* stream will support optional semicolon instructions from the parser
*/
public interface IRepairingTokenBuffer
{
/**
* Enables or disables the insertion of semicolons
*
* @param enable true if we should insert semicolons into the token stream
*/
void setEnableSemicolonInsertion(boolean enable);
/**
* Inserts a semicolon into the token stream
*
* @param isNextToken true if the semicolon should be the next token
* @return true if the semicolon was successfully inserted.
*/
boolean insertSemicolon(boolean isNextToken);
/**
* Adds a syntax error that we encountered during parsing
*
* @param error the {@link SyntaxProblem} to add
*/
void addError(SyntaxProblem error);
/**
* Marks the position in the underlying token buffer. Token index starts
* from 0. If we haven't consumed any token from the buffer, the "mark" will
* be "0". If the first token in the buffer was just consumed, the "mark"
* will be "1".
*
* @return Index of the LT(1) token in the buffer.
*/
int mark();
/**
* Rewinds the token buffer to the given position. This is optional
*
* @param position the non-negative position
*/
void rewind(int position);
/**
* Consumes the current token in the buffer
*/
void consume();
/**
* Looks ahead an arbitrary distance and returns back the token type. If no
* token exists, it will return EOF
*
* @param i the offset to look ahead
* @return the token type, or EOF
*/
int LA(int i);
/**
* Looks ahead an arbitrary distance and returns back the token. If no token
* exists, it will return EOF
*
* @param i the offset to look ahead
* @return the token, or EOF
*/
ASToken LT(int i);
/**
* Get the first non-fix-up-semicolon from the look-ahead. For example, if
* the buffer.isNextSemicolon=true and the look-ahead buffer is [A, B, C,
* ...], LA(1) will return the fix-up semicolon, but this method will return
* "A". This is useful for error reporting, because we don't want to treat
* invalid fix-up semicolons as source code errors.
*
* @return The first non-fix-up-semicolon from the look-ahead.
*/
ASToken lookAheadSkipInsertedSemicolon();
/**
* Returns the previous token the buffer was looking at
*
* @return the previous token, or EOF
*/
ASToken previous();
/**
* Match an optional semicolon.
*
* @return True if either a semicolon token or a virtual semicolon is
* matched.
*/
boolean matchOptionalSemicolon();
}