forked from JavaTX/JavaCompilerCore
Expr und ExprStmt ändern
This commit is contained in:
parent
bc812ad083
commit
a1227a8b1b
@ -4,6 +4,7 @@ import java.util.List;
|
||||
|
||||
import org.apache.bcel.generic.ClassGen;
|
||||
|
||||
import de.dhbwstuttgart.typeinference.JavaCodeResult;
|
||||
import de.dhbwstuttgart.typeinference.Menge;
|
||||
import de.dhbwstuttgart.bytecode.ClassGenerator;
|
||||
import de.dhbwstuttgart.core.IItemWithOffset;
|
||||
@ -146,4 +147,5 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{
|
||||
return offset;
|
||||
}
|
||||
|
||||
public abstract JavaCodeResult printJavaCode(ResultSet resultSet);
|
||||
}
|
||||
|
@ -14,7 +14,11 @@ import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
|
||||
|
||||
public class ArgumentList extends SyntaxTreeNode
|
||||
{
|
||||
public Menge<Expr> expr = new Menge<Expr>();
|
||||
public ArgumentList(int offset) {
|
||||
super(offset);
|
||||
}
|
||||
|
||||
public Menge<Expr> expr = new Menge<Expr>();
|
||||
|
||||
|
||||
public Object get_firstElement()
|
||||
|
@ -1,7 +1,6 @@
|
||||
// ino.module.Assign.8622.package
|
||||
|
||||
package de.dhbwstuttgart.syntaxtree.statement;
|
||||
// ino.end
|
||||
// ino.module.Assign.8622.import
|
||||
|
||||
import java.util.Enumeration;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Iterator;
|
||||
@ -37,60 +36,31 @@ import de.dhbwstuttgart.typeinference.unify.TypeUnify;
|
||||
|
||||
|
||||
|
||||
// ino.class.Assign.24926.declaration
|
||||
public class Assign extends Expr
|
||||
// ino.end
|
||||
// ino.class.Assign.24926.body
|
||||
public class Assign extends ExprStmt
|
||||
{
|
||||
// ino.method.Assign.24930.definition
|
||||
public Assign(int offset,int variableLength)
|
||||
// ino.end
|
||||
// ino.method.Assign.24930.body
|
||||
{
|
||||
super(offset,variableLength);
|
||||
}
|
||||
// ino.end
|
||||
|
||||
public Assign(Type type, int offset) {
|
||||
super(type, offset);
|
||||
}
|
||||
|
||||
// ino.attribute.expr1.24933.declaration
|
||||
public Expr expr1;
|
||||
// ino.end
|
||||
// ino.attribute.expr2.24936.declaration
|
||||
public Expr expr1;
|
||||
public Expr expr2;
|
||||
// ino.end
|
||||
|
||||
// ino.attribute.parserlog.24939.decldescription type=javadoc
|
||||
/**
|
||||
* Logger log4j
|
||||
*/
|
||||
// ino.end
|
||||
// ino.attribute.parserlog.24939.declaration
|
||||
protected static Logger parserlog = Logger.getLogger("parser");
|
||||
// ino.end
|
||||
|
||||
|
||||
// ino.method.set_Expr.24942.definition
|
||||
public void set_Expr(Expr expr1,Expr expr2)
|
||||
// ino.end
|
||||
// ino.method.set_Expr.24942.body
|
||||
{
|
||||
this.expr1 = expr1;
|
||||
this.expr2 = expr2;
|
||||
}
|
||||
// ino.end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ino.method.get_Name.24948.definition
|
||||
public String get_Name()
|
||||
// ino.end
|
||||
// ino.method.get_Name.24948.body
|
||||
{
|
||||
return null;
|
||||
}
|
||||
// ino.end
|
||||
|
||||
|
||||
/**
|
||||
@ -102,7 +72,7 @@ public class Assign extends Expr
|
||||
ret.add(expr1.TYPEExpr(assumptions));
|
||||
ret.add(expr2.TYPEExpr(assumptions));
|
||||
//this.setTypeVariable( TypePlaceholder.fresh(this));
|
||||
this.setType(TypePlaceholder.fresh(this));
|
||||
//this.setType(TypePlaceholder.fresh(this));
|
||||
ret.add(ConstraintsSet.createSingleConstraint(expr2.getType().TYPE(assumptions, this), expr1.getType().TYPE(assumptions, this))); //expr2.type <. expr1.type
|
||||
ret.add(ConstraintsSet.createSingleConstraint(expr1.getType().TYPE(assumptions, this), this.getType().TYPE(assumptions, this)));
|
||||
return ret;
|
||||
@ -117,7 +87,7 @@ public class Assign extends Expr
|
||||
@Override
|
||||
public ConstraintsSet TYPEStmt(TypeAssumptions assumptions){
|
||||
ConstraintsSet ret = this.TYPEExpr(assumptions); //TypeExpr aufrufen
|
||||
this.setType(new Void(this,0)); //Typ des Statments auf Void setzen.
|
||||
//this.setType(new Void(0)); //Typ des Statments auf Void setzen.
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ public class BoolLiteral extends Literal
|
||||
super(-1,-1);
|
||||
// #JB# 20.04.2005
|
||||
// ###########################################################
|
||||
this.setType(new RefType("Boolean",this,this.getOffset()));
|
||||
this.setType(new RefType("java.lang.Boolean",this.getOffset()));
|
||||
//this.setType(new Type("boolean"));
|
||||
// ###########################################################
|
||||
}
|
||||
@ -99,7 +99,6 @@ public class BoolLiteral extends Literal
|
||||
|
||||
@Override
|
||||
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
||||
this.type = assumptions.checkType(new RefType("java.lang.Boolean",this,-1), this);
|
||||
return new ConstraintsSet();
|
||||
}
|
||||
|
||||
@ -118,15 +117,6 @@ public class BoolLiteral extends Literal
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void wandleRefTypeAttributes2GenericAttributes(
|
||||
Menge<Type> paralist,
|
||||
Menge<GenericTypeVar> genericMethodParameters) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public InstructionList genByteCode(ClassGenerator _cg, TypeinferenceResultSet rs) {
|
||||
InstructionFactory _factory = new InstructionFactory(_cg, _cg.getConstantPool());
|
||||
|
@ -26,16 +26,17 @@ import de.dhbwstuttgart.typeinference.exceptions.NotImplementedException;
|
||||
|
||||
|
||||
// ino.class.CastExpr.25126.declaration
|
||||
public class CastExpr extends UnaryExpr
|
||||
public class CastExpr extends Expr
|
||||
// ino.end
|
||||
// ino.class.CastExpr.25126.body
|
||||
{
|
||||
// ino.method.CastExpr.25130.definition
|
||||
public CastExpr(int offset,int variableLength)
|
||||
public CastExpr(Type castType, Expr expr,int offset)
|
||||
// ino.end
|
||||
// ino.method.CastExpr.25130.body
|
||||
{
|
||||
super(offset,variableLength);
|
||||
super(offset);
|
||||
this.type = castType;
|
||||
}
|
||||
// ino.end
|
||||
|
||||
@ -106,7 +107,7 @@ public class CastExpr extends UnaryExpr
|
||||
|
||||
@Override
|
||||
public JavaCodeResult printJavaCode(ResultSet resultSet) {
|
||||
return new JavaCodeResult("(("+this.usedid+")").attach(this.expr.printJavaCode(resultSet)).attach(")");
|
||||
return new JavaCodeResult("(("+this.+")").attach(this.expr.printJavaCode(resultSet)).attach(")");
|
||||
}
|
||||
|
||||
|
||||
|
36
src/de/dhbwstuttgart/syntaxtree/statement/Executeable.java
Executable file
36
src/de/dhbwstuttgart/syntaxtree/statement/Executeable.java
Executable file
@ -0,0 +1,36 @@
|
||||
|
||||
package de.dhbwstuttgart.syntaxtree.statement;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.apache.bcel.generic.InstructionList;
|
||||
|
||||
import de.dhbwstuttgart.typeinference.Menge;
|
||||
|
||||
import de.dhbwstuttgart.logger.Logger;
|
||||
import de.dhbwstuttgart.bytecode.ClassGenerator;
|
||||
import de.dhbwstuttgart.core.MyCompiler;
|
||||
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
||||
import de.dhbwstuttgart.syntaxtree.type.Type;
|
||||
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
||||
import de.dhbwstuttgart.typeinference.Pair;
|
||||
import de.dhbwstuttgart.typeinference.Typeable;
|
||||
import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
|
||||
import de.dhbwstuttgart.typeinference.unify.TypeUnify;
|
||||
|
||||
public abstract class Executeable extends SyntaxTreeNode implements Typeable
|
||||
{
|
||||
private Type type;
|
||||
|
||||
public Executeable(Type type,int offset) {
|
||||
super(offset);
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public Type getType(){
|
||||
return type;
|
||||
}
|
||||
|
||||
public abstract InstructionList genByteCode(ClassGenerator _cg, TypeinferenceResultSet rs);
|
||||
|
||||
public abstract String getTypeInformation();
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
// ino.module.Expr.8630.package
|
||||
|
||||
package de.dhbwstuttgart.syntaxtree.statement;
|
||||
// ino.end
|
||||
// ino.module.Expr.8630.import
|
||||
|
||||
import java.util.Hashtable;
|
||||
import java.util.Iterator;
|
||||
|
||||
@ -10,7 +9,7 @@ import org.apache.bcel.generic.InstructionList;
|
||||
|
||||
import de.dhbwstuttgart.typeinference.Menge;
|
||||
import de.dhbwstuttgart.syntaxtree.Class;
|
||||
import de.dhbwstuttgart.syntaxtree.misc.UsedId;
|
||||
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
||||
import de.dhbwstuttgart.syntaxtree.type.Type;
|
||||
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
||||
import de.dhbwstuttgart.typeinference.ConstraintsSet;
|
||||
@ -18,81 +17,14 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
|
||||
import de.dhbwstuttgart.typeinference.exceptions.NotImplementedException;
|
||||
|
||||
|
||||
|
||||
// ino.class.Expr.25225.declaration
|
||||
public abstract class Expr extends ExprStmt
|
||||
// ino.end
|
||||
// ino.class.Expr.25225.body
|
||||
public abstract class Expr extends Executeable
|
||||
{
|
||||
// ino.method.Expr.25229.definition
|
||||
public Expr(int offset, int variableLength)
|
||||
// ino.end
|
||||
// ino.method.Expr.25229.body
|
||||
{
|
||||
super(offset, variableLength);
|
||||
}
|
||||
// ino.end
|
||||
|
||||
// ino.attribute.usedid.25232.declaration
|
||||
public UsedId usedid; //String type; ab sofort in die Klasse ExprStmt verlegt. last1 17.03.02
|
||||
// ino.end
|
||||
|
||||
// ino.method.set_Type.25235.definition
|
||||
public void set_Type(Type type)
|
||||
// ino.end
|
||||
// ino.method.set_Type.25235.body
|
||||
{
|
||||
this.setType(type);
|
||||
}
|
||||
// ino.end
|
||||
|
||||
// ino.method.set_UsedId.25238.definition
|
||||
public void set_UsedId(UsedId ui)
|
||||
// ino.end
|
||||
// ino.method.set_UsedId.25238.body
|
||||
{
|
||||
this.usedid = ui;
|
||||
}
|
||||
// ino.end
|
||||
|
||||
// ino.method.get_UsedId.25241.definition
|
||||
public UsedId get_UsedId()
|
||||
// ino.end
|
||||
// ino.method.get_UsedId.25241.body
|
||||
{
|
||||
return usedid;
|
||||
}
|
||||
// ino.end
|
||||
|
||||
// ino.method.get_Name_Menge.25244.definition
|
||||
public Menge get_Name_Menge()
|
||||
// ino.end
|
||||
// ino.method.get_Name_Menge.25244.body
|
||||
{
|
||||
return usedid.get_Name();
|
||||
}
|
||||
// ino.end
|
||||
|
||||
|
||||
|
||||
// ino.method.get_Type_Menge.25247.definition
|
||||
public Menge get_Type_Menge()
|
||||
// ino.end
|
||||
// ino.method.get_Type_Menge.25247.body
|
||||
{
|
||||
return usedid.get_Typen();
|
||||
}
|
||||
// ino.end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ino.method.get_Name.25253.declaration
|
||||
public abstract String get_Name();
|
||||
// ino.end
|
||||
public Expr(Type type, int offset) {
|
||||
super(type, offset);
|
||||
}
|
||||
|
||||
public abstract String get_Name();
|
||||
|
||||
/**
|
||||
* @author AI10023 - Andreas Stadelmeier
|
||||
@ -100,17 +32,4 @@ public abstract class Expr extends ExprStmt
|
||||
* Jede Expression wird im Zuge des Algorithmus durch die TYPEExpr-Funktion angesprochen.
|
||||
*/
|
||||
public abstract ConstraintsSet TYPEExpr(TypeAssumptions assumptions);
|
||||
|
||||
/**
|
||||
* @author AI10023 - Andreas Stadelmeier
|
||||
* Die Funktion überschreiben, damit sie von Expressions nicht mehr spezifiziert werden muss.
|
||||
* Denn Expressions müssen diese Funktion nicht implementieren.
|
||||
*/
|
||||
@Override
|
||||
public ConstraintsSet TYPEStmt(TypeAssumptions assumptions){
|
||||
throw new NotImplementedException(); //wird die TYPEStmt-Methode innerhalb einer Expr aufgerufen, dann ist etwas schief gelaufen.
|
||||
}
|
||||
|
||||
//public abstract InstructionList genByteCode(ClassGen _cg, TypeAssumptions ass);
|
||||
}
|
||||
// ino.end
|
||||
|
71
src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java
Executable file → Normal file
71
src/de/dhbwstuttgart/syntaxtree/statement/ExprStmt.java
Executable file → Normal file
@ -1,69 +1,14 @@
|
||||
// ino.module.ExprStmt.8631.package
|
||||
package de.dhbwstuttgart.syntaxtree.statement;
|
||||
// ino.end
|
||||
|
||||
// ino.module.ExprStmt.8631.import
|
||||
import java.util.Iterator;
|
||||
import de.dhbwstuttgart.typeinference.Menge;
|
||||
|
||||
import de.dhbwstuttgart.logger.Logger;
|
||||
|
||||
import de.dhbwstuttgart.core.MyCompiler;
|
||||
import de.dhbwstuttgart.syntaxtree.type.Type;
|
||||
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
||||
import de.dhbwstuttgart.typeinference.Pair;
|
||||
import de.dhbwstuttgart.typeinference.unify.TypeUnify;
|
||||
import de.dhbwstuttgart.typeinference.ConstraintsSet;
|
||||
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
|
||||
|
||||
// ino.class.ExprStmt.25265.declaration
|
||||
public abstract class ExprStmt extends Statement
|
||||
// ino.end
|
||||
// ino.class.ExprStmt.25265.body
|
||||
{
|
||||
// ino.method.ExprStmt.25270.definition
|
||||
public ExprStmt(int offset, int variableLength)
|
||||
// ino.end
|
||||
// ino.method.ExprStmt.25270.body
|
||||
{
|
||||
super(offset,variableLength);
|
||||
}
|
||||
// ino.end
|
||||
|
||||
|
||||
// ino.attribute.type.25273.declaration
|
||||
//protected Type type; // Type type;
|
||||
// ino.end
|
||||
// ino.attribute.inferencelog.25276.declaration
|
||||
protected static Logger inferencelog = Logger.getLogger("inference");
|
||||
// ino.end
|
||||
|
||||
// ino.method.getTypeName.25279.definition
|
||||
public String getTypeName()
|
||||
// ino.end
|
||||
// ino.method.getTypeName.25279.body
|
||||
{
|
||||
if (getType()!=null)
|
||||
return getType().getName().toString();
|
||||
else
|
||||
return null;
|
||||
}
|
||||
// ino.end
|
||||
|
||||
|
||||
|
||||
// ino.method.getTypeLineNumber.25291.defdescription type=javadoc
|
||||
/**
|
||||
* <br>Author: J�rg B�uerle
|
||||
* @return
|
||||
*/
|
||||
// ino.end
|
||||
// ino.method.getTypeLineNumber.25291.definition
|
||||
public int getTypeLineNumber()
|
||||
// ino.end
|
||||
// ino.method.getTypeLineNumber.25291.body
|
||||
{
|
||||
return MyCompiler.NO_LINENUMBER;
|
||||
}
|
||||
// ino.end
|
||||
public abstract class ExprStmt extends Executeable{
|
||||
|
||||
public ExprStmt(Type type,int offset) {
|
||||
super(type,offset);
|
||||
}
|
||||
public abstract ConstraintsSet TYPEExpr(TypeAssumptions assumptions);
|
||||
public abstract ConstraintsSet TYPEStmt(TypeAssumptions assumptions);
|
||||
}
|
||||
// ino.end
|
||||
|
@ -1,7 +1,6 @@
|
||||
// ino.module.Statement.8652.package
|
||||
package de.dhbwstuttgart.syntaxtree.statement;
|
||||
// ino.end
|
||||
// ino.module.Statement.8652.import
|
||||
|
||||
import java.util.Enumeration;
|
||||
import java.util.Hashtable;
|
||||
|
||||
@ -28,43 +27,15 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
|
||||
|
||||
|
||||
|
||||
// ino.class.Statement.26184.declaration
|
||||
public abstract class Statement extends SyntaxTreeNode implements IItemWithOffset, Typeable
|
||||
// ino.end
|
||||
// ino.class.Statement.26184.body
|
||||
public abstract class Statement extends Executeable
|
||||
{
|
||||
|
||||
// ino.attribute.offset.26188.declaration
|
||||
protected int offset;
|
||||
// ino.end
|
||||
// ino.attribute.variableLength.26191.declaration
|
||||
private int variableLength;
|
||||
// ino.end
|
||||
|
||||
protected Type type;
|
||||
|
||||
public Statement(int offset)
|
||||
public Statement(Type type,int offset)
|
||||
{
|
||||
this.offset=offset;
|
||||
//this.variableLength=variableLength;
|
||||
super(type,offset);
|
||||
}
|
||||
|
||||
// ino.method.getOffset.26197.definition
|
||||
public int getOffset()
|
||||
// ino.end
|
||||
// ino.method.getOffset.26197.body
|
||||
{
|
||||
return offset;
|
||||
}
|
||||
// ino.end
|
||||
|
||||
// ino.method.getVariableLength.26200.definition
|
||||
public int getVariableLength()
|
||||
// ino.end
|
||||
// ino.method.getVariableLength.26200.body
|
||||
{
|
||||
return variableLength;
|
||||
}
|
||||
|
||||
/**
|
||||
* @author AI10023 - Andreas Stadelmeier
|
||||
@ -73,12 +44,6 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse
|
||||
*/
|
||||
public abstract ConstraintsSet TYPEStmt(TypeAssumptions assumptions);
|
||||
|
||||
|
||||
|
||||
public Type getType(){
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @author Andreas Stadelmeier, a10023
|
||||
* Sollte von jedem Statement überschrieben werden.
|
||||
@ -86,23 +51,9 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse
|
||||
* @return
|
||||
*/
|
||||
public String getTypeInformation(){
|
||||
return this.printJavaCode(new ResultSet(new Menge<Pair>()))+" : "+type.toString();
|
||||
return this.printJavaCode(new ResultSet(new Menge<Pair>()))+" : "+this.getType().toString();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @author AI10023 - Andreas Stadelmeier
|
||||
* Jedem Statement und jeder Expression wird im Zuge des Typinferenzalgorithmus eine Typvariable zugewiesen.
|
||||
* Daher müssen alle Statements und Expressions die Methoden setTypeVariable und getTypeVariable implementieren.
|
||||
*/
|
||||
public void setType(Type t)
|
||||
{
|
||||
this.type=t;
|
||||
}
|
||||
|
||||
|
||||
public abstract JavaCodeResult printJavaCode(ResultSet resultSet);
|
||||
|
||||
@Override
|
||||
public String getDescription(){
|
||||
return this.printJavaCode(new ResultSet(new Menge<Pair>())).toString();
|
||||
@ -116,10 +67,5 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse
|
||||
}
|
||||
|
||||
|
||||
public abstract InstructionList genByteCode(ClassGenerator _cg, TypeinferenceResultSet rs);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ino.end
|
||||
|
Loading…
Reference in New Issue
Block a user