declare works with list

This commit is contained in:
Minh VU
2025-04-05 15:55:24 +02:00
parent a06374fbab
commit 0a48bf22bf
6 changed files with 40 additions and 15 deletions

View File

@@ -69,19 +69,22 @@ instruction [SymTable table] returns [Instruction out]:
$out =new Return_instrImp($e.out);}
//| //ASSIGN
//i=ident ASSIGN e=expression [table]
// {
//{
// $out = new AssignImp($i.out, $e.out);
// }
//}
| //DECLARATION
t=type i=ident
{
$table.addVar($i.out,$t.return_type);
$out = new DeclarationImp($t.return_type, $i.out);
ArrayList<String> declare= new ArrayList<String>();
declare.add($i.out);
$table.addVar($i.out,$t.return_type);
}(VIRGULE i2=ident
{
$table.addVar($i2.out,$t.return_type);
$out = new DeclarationImp($t.return_type, $i2.out);
declare.add($i2.out);
})*
{$out = new DeclarationImp($t.return_type, declare);}
;
//Priorité lit(val, const ou paranthese) -> td_exp (*/%) -> exp (+-)
@@ -137,6 +140,12 @@ lit [SymTable table] returns [Expression out, Type return_Type]:
$out=$e.out;
$return_Type=$e.return_Type;
}
// | t=ident{
// if($table.searchVar($t.out)){
// $out=$t.out;
// $return_Type=$table.getvar_Type($t.out);
// }
// }
;
ident returns [String out]:

View File

@@ -0,0 +1,5 @@
package TP2.Error;
public class TypeChecking {
}

View File

@@ -59,6 +59,7 @@ public interface Interface{
public interface ExprVisitor<H,S> {
public S visitConst(ConstImp e,H h);
public S visitBinOp(BinopExpressionImp e, H h);
//public S visitVal(ValImp e,H h);
}
public interface Type{

View File

@@ -169,8 +169,7 @@ public class Program{
@Override
public String prettyprinter(String indent) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'prettyprinter'");
return t+ " :=" + e.toString();
}
@Override
@@ -184,7 +183,7 @@ public class Program{
}
}
public static record DeclarationImp(Type t, String s) implements Instruction{
public static record DeclarationImp(Type t, ArrayList<String> s) implements Instruction{
@Override
public <H, S> S accept(InstrVisitor<H, S> v, H h) {
@@ -193,17 +192,21 @@ public class Program{
@Override
public String prettyprinter(String indent) {
return "declare "+t.toString()+s;
String str = indent + "declare "+t.prettyprinter() + " ";
for(int i = 0; i<s.size();i++){
str += s.get(i) + ", ";
}
return str;
}
@Override
public ArrayList<InstructionLLVM> toLLVM() {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'toLLVM'");
}
}
}
//Type
public static record Type_voidImp() implements Type{
public String prettyprinter() {
return "VOID";
@@ -264,9 +267,7 @@ public class Program{
}
@Override
public Integer visitAssign(AssignImp e, Map<String, Integer> h) {
//h.put(e.t(), e.e());
//TODO
return 1;
return e.accept(this, h);
}
@Override
public Integer visitDeclaration(DeclarationImp e, Map<String, Integer> h) {

View File

@@ -46,6 +46,15 @@ public class SymTable {
return false;
}
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--){