package org.overture.pog.utility; import org.overture.ast.expressions.AVariableExp; import org.overture.ast.expressions.PExp; import org.overture.ast.intf.lex.ILexNameToken; /** * A class for holding variable substitutions to be performed at a later date by the * * @author ldc */ public class Substitution { String original; PExp newExp; public String getOriginal() { return original; } public Substitution(ILexNameToken var, PExp value) { this.original = makeFullKey(var); this.newExp = value.clone(); } public Substitution(String original, PExp exp) { this.original = original; this.newExp = exp.clone(); } public boolean containsKey(AVariableExp key) { String fullkey = makeFullKey(key.getName()); return original.equals(fullkey); } public PExp get(AVariableExp key) { String fullkey = makeFullKey(key.getName()); if (original.equals(fullkey)) { return newExp; } return null; } public String makeFullKey(ILexNameToken name) { if (name.isOld()) { return name.getName() + "~"; } else { return name.getName(); } } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("["); sb.append(newExp.toString()); sb.append("/"); sb.append(original); sb.append("]"); return sb.toString(); } }