declare works with list
This commit is contained in:
@@ -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]:
|
||||
|
||||
5
src/main/java/TP2/Error/TypeChecking.java
Normal file
5
src/main/java/TP2/Error/TypeChecking.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package TP2.Error;
|
||||
|
||||
public class TypeChecking {
|
||||
|
||||
}
|
||||
@@ -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{
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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--){
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
FUNC INT main() {
|
||||
INT a
|
||||
INT a,b,c
|
||||
RETURN 4 + 6 * 5 + 3 }
|
||||
Reference in New Issue
Block a user