Files
tp2-vsl-pds/src/main/java/TP2/asd/SymTable.java
Vu Tuan Minh addf4bdee1 stack
2025-04-07 17:33:38 +02:00

84 lines
2.2 KiB
Java

package TP2.asd;
import java.util.Stack;
import org.pcollections.*;
import TP2.asd.Interface.Type;
import TP2.asd.Program.Type_intImp;
public class SymTable {
private PStack<PMap<String,Type>> stackMap;
private int id=1;
public SymTable(){
this.stackMap= ConsPStack.empty();
}
public String addNewTempVar(/*Type type*/){
//TODO
String newVar = "temp"+this.id;
//this.addVar(newVar,new Type_intImp()); //TODO
id++;
return newVar;
}
public void next_layer(){
stackMap.plus(HashTreePMap.empty());
}
public void quit_layer() throws Exception{
if(stackMap.isEmpty()){
throw new Exception();
}
stackMap.minus(stackMap.indexOf(stackMap.getLast()));
}
public PMap<String,Type> peppapeek(){
return stackMap.getLast();
}
public void addVar(String s, Type t){
//Save temporary if not PMap wont save
PMap<String, Type> pmap = this.peppapeek();
pmap= pmap.plus(s/*+"_"+this.id*/,t);
//this.id++;
//Delete old ones
stackMap.minus(stackMap.indexOf(stackMap.getLast()));
//Push the new one
stackMap.plus(pmap);
}
//Usually look for var in highest level , if not found research.
public boolean searchVar(String s){
//TOTO
for(int i= stackMap.size()-1; i>=0; i--){
if(stackMap.get(i).containsKey(s)){
return true;
}
}
return false;
}
public Stack<PMap<String,Type>> stackmap(){
return this.stackmap();
}
public Type getvar_Type(String s){
for(int i= stackMap.size()-1; i>=0; i--){
if(stackMap.get(i).containsKey(s)){
return stackMap.get(i).get(s);
}
}
return null;
}
public String print_all(){
StringBuilder str = new StringBuilder();
for(int i= stackMap.size()-1; i>=0; i--){
str.append("level ").append(i).append("\n");
for(String s: stackMap.get(i).keySet()){
str.append(s).append(" ").append(stackMap.get(i).get(s)).append("\n");
}
}
return str.toString();
}
}