Package hampi.parser

Source Code of hampi.parser.HInExpression

package hampi.parser;

import hampi.HampiException;
import hampi.parser.HProgram.HTypeEnvironment;

/**
* Represents the 'in' expression. For example 'v in S'.
*/
public final class HInExpression extends HBooleanExpression{

  private final String  id1;
  private final String  id2;
  private final boolean in;

  public HInExpression(String id1, String id2, boolean in){
    super(HGrammarElementKind.BEXPR_IN);
    this.id1 = id1;
    this.id2 = id2;
    this.in = in;
  }

  public String getVarName(){
    return id1;
  }

  public String getRegVarName(){
    return id2;
  }

  public boolean isIn(){
    return in;
  }

  @Override
  public String unparse(){
    return id1 + (in ? "" : " not") + " in " + id2;
  }

  @Override
  public void typeCheck(HTypeEnvironment tenv, HVarDeclStatement varDecl){
    if (tenv.getType(id1) != HType.STRING_TYPE)
      throw new HampiException("extected string type on left in 'in' but got " + tenv.getType(id1) + " in " + unparse());
    if (tenv.getType(id2) != HType.REG_TYPE && tenv.getType(id2) != HType.CFG_TYPE)
      throw new HampiException("extected reg or cfg type on right in 'in' but got " + tenv.getType(id2) + " in " + unparse());
  }

  @Override
  public void accept(HGrammarVisitor v){
    v.visitInExpression(this);
  }
}
TOP

Related Classes of hampi.parser.HInExpression

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.