Package sicel.compiler.parser.internal

Source Code of sicel.compiler.parser.internal.AbstractParser

package sicel.compiler.parser.internal;

import java.io.File;

import sicel.compiler.parser.ASTNode;
import sicel.compiler.parser.Lexer;
import sicel.compiler.parser.Parser;
import sicel.compiler.parser.Token;
import sicel.compiler.parser.exceptions.SyntaxError;
import sicel.compiler.parser.exceptions.UnexpectedTokenError;

public abstract class AbstractParser implements Parser
{
  protected Lexer lexer;
  protected Token consumedToken;
  protected ASTNode consumedNode;
 
  @Override
  public void setLexer(Lexer lexer)
  {
    this.lexer = lexer;
  }
 
  public abstract ASTNode parse( File file );
 
  protected final Token expect( Class<? extends Token> tokenType )
  {
    Token t = lexer.take();
    if( t == null )
    {
      throw new SyntaxError("Unexpected EOF", "", 0, 0);
    }
    if( ! t.getClass().equals( tokenType ) )
    {
      throw new UnexpectedTokenError( t, tokenType );
    }
    return t;
  }
 
  protected final boolean consumeIf( Class<? extends Token> tokenType )
  {
    Token t = lexer.peek();
    if( t == null ) return false;
    if( t.getClass().equals( tokenType ) )
    {
      consumedToken = lexer.take();
      return true;
    }
    return false;
  }
 
  protected final boolean lookAhead( int depth, Class<? extends Token> tokenType )
  {
    Token t = lexer.lookAhead( depth );
    if( t == null ) return false;
    return ( t.getClass().equals( tokenType ) );
  }
}
TOP

Related Classes of sicel.compiler.parser.internal.AbstractParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.