forked from JavaTX/JavaCompilerCore
ANTLR Parser erweitert
This commit is contained in:
parent
8d0f24f2f8
commit
60a304667a
@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
|
|||||||
<li><a href="../../../../de/dhbwstuttgart/syntaxtree/type/ObjectType.html" title="class in de.dhbwstuttgart.syntaxtree.type">de.dhbwstuttgart.syntaxtree.type.ObjectType</a></li>
|
<li><a href="../../../../de/dhbwstuttgart/syntaxtree/type/ObjectType.html" title="class in de.dhbwstuttgart.syntaxtree.type">de.dhbwstuttgart.syntaxtree.type.ObjectType</a></li>
|
||||||
<li>
|
<li>
|
||||||
<ul class="inheritance">
|
<ul class="inheritance">
|
||||||
<li>de.dhbwstuttgart.syntaxtree.type.RefType</li>
|
<li>de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
|
|||||||
<li><a href="../../../../de/dhbwstuttgart/syntaxtree/type/ObjectType.html" title="class in de.dhbwstuttgart.syntaxtree.type">de.dhbwstuttgart.syntaxtree.type.ObjectType</a></li>
|
<li><a href="../../../../de/dhbwstuttgart/syntaxtree/type/ObjectType.html" title="class in de.dhbwstuttgart.syntaxtree.type">de.dhbwstuttgart.syntaxtree.type.ObjectType</a></li>
|
||||||
<li>
|
<li>
|
||||||
<ul class="inheritance">
|
<ul class="inheritance">
|
||||||
<li><a href="../../../../de/dhbwstuttgart/syntaxtree/type/RefType.html" title="class in de.dhbwstuttgart.syntaxtree.type">de.dhbwstuttgart.syntaxtree.type.RefType</a></li>
|
<li><a href="../../../../de/dhbwstuttgart/syntaxtree/type/RefType.html" title="class in de.dhbwstuttgart.syntaxtree.type">de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH</a></li>
|
||||||
<li>
|
<li>
|
||||||
<ul class="inheritance">
|
<ul class="inheritance">
|
||||||
<li>de.dhbwstuttgart.syntaxtree.type.Void</li>
|
<li>de.dhbwstuttgart.syntaxtree.type.Void</li>
|
||||||
@ -219,7 +219,7 @@ extends <a href="../../../../de/dhbwstuttgart/syntaxtree/type/RefType.html" titl
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList"><a name="methods.inherited.from.class.de.dhbwstuttgart.syntaxtree.type.RefType">
|
<li class="blockList"><a name="methods.inherited.from.class.de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class de.dhbwstuttgart.syntaxtree.type.<a href="../../../../de/dhbwstuttgart/syntaxtree/type/RefType.html" title="class in de.dhbwstuttgart.syntaxtree.type">RefType</a></h3>
|
<h3>Methods inherited from class de.dhbwstuttgart.syntaxtree.type.<a href="../../../../de/dhbwstuttgart/syntaxtree/type/RefType.html" title="class in de.dhbwstuttgart.syntaxtree.type">RefType</a></h3>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<html lang="de">
|
<html lang="de">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_05) on Tue May 12 19:56:24 CEST 2015 -->
|
<!-- Generated by javadoc (1.8.0_05) on Tue May 12 19:56:24 CEST 2015 -->
|
||||||
<title>Uses of Class de.dhbwstuttgart.syntaxtree.type.RefType</title>
|
<title>Uses of Class de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH</title>
|
||||||
<meta name="date" content="2015-05-12">
|
<meta name="date" content="2015-05-12">
|
||||||
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../../../../../script.js"></script>
|
<script type="text/javascript" src="../../../../../script.js"></script>
|
||||||
@ -70,7 +70,7 @@
|
|||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<h2 title="Uses of Class de.dhbwstuttgart.syntaxtree.type.RefType" class="title">Uses of Class<br>de.dhbwstuttgart.syntaxtree.type.RefType</h2>
|
<h2 title="Uses of Class de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH" class="title">Uses of Class<br>de.dhbwstuttgart.syntaxtree.type.RefType</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="classUseContainer">
|
<div class="classUseContainer">
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
|
@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
|
|||||||
<li><a href="../../../de/dhbwstuttgart/syntaxtree/type/ObjectType.html" title="class in de.dhbwstuttgart.syntaxtree.type">de.dhbwstuttgart.syntaxtree.type.ObjectType</a></li>
|
<li><a href="../../../de/dhbwstuttgart/syntaxtree/type/ObjectType.html" title="class in de.dhbwstuttgart.syntaxtree.type">de.dhbwstuttgart.syntaxtree.type.ObjectType</a></li>
|
||||||
<li>
|
<li>
|
||||||
<ul class="inheritance">
|
<ul class="inheritance">
|
||||||
<li><a href="../../../de/dhbwstuttgart/syntaxtree/type/RefType.html" title="class in de.dhbwstuttgart.syntaxtree.type">de.dhbwstuttgart.syntaxtree.type.RefType</a></li>
|
<li><a href="../../../de/dhbwstuttgart/syntaxtree/type/RefType.html" title="class in de.dhbwstuttgart.syntaxtree.type">de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH</a></li>
|
||||||
<li>
|
<li>
|
||||||
<ul class="inheritance">
|
<ul class="inheritance">
|
||||||
<li>de.dhbwstuttgart.typeinference.FunN</li>
|
<li>de.dhbwstuttgart.typeinference.FunN</li>
|
||||||
@ -245,7 +245,7 @@ extends <a href="../../../de/dhbwstuttgart/syntaxtree/type/RefType.html" title="
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList"><a name="methods.inherited.from.class.de.dhbwstuttgart.syntaxtree.type.RefType">
|
<li class="blockList"><a name="methods.inherited.from.class.de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class de.dhbwstuttgart.syntaxtree.type.<a href="../../../de/dhbwstuttgart/syntaxtree/type/RefType.html" title="class in de.dhbwstuttgart.syntaxtree.type">RefType</a></h3>
|
<h3>Methods inherited from class de.dhbwstuttgart.syntaxtree.type.<a href="../../../de/dhbwstuttgart/syntaxtree/type/RefType.html" title="class in de.dhbwstuttgart.syntaxtree.type">RefType</a></h3>
|
||||||
|
@ -10,16 +10,35 @@ import org.antlr.v4.runtime.ANTLRInputStream;
|
|||||||
import org.antlr.v4.runtime.CommonTokenStream;
|
import org.antlr.v4.runtime.CommonTokenStream;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class JavaTXParser {
|
public class JavaTXParser {
|
||||||
public SourceFile parse(File sourceFile) throws IOException {
|
public SourceFile parse(File sourceFile) throws IOException {
|
||||||
InputStream stream = new FileInputStream(sourceFile);
|
InputStream stream = new FileInputStream(sourceFile);
|
||||||
ANTLRInputStream input = new ANTLRInputStream(stream);
|
ANTLRInputStream input = new ANTLRInputStream(stream);
|
||||||
Java8Lexer lexer = new Java8Lexer(input);
|
Java8Lexer lexer = new Java8Lexer(input);
|
||||||
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
||||||
Java8Parser parser = new Java8Parser(tokens);
|
Java8Parser parser = new Java8Parser(tokens);
|
||||||
Java8Parser.CompilationUnitContext tree = parser.compilationUnit();
|
Java8Parser.CompilationUnitContext tree = parser.compilationUnit();
|
||||||
SyntaxTreeGenerator generator = new SyntaxTreeGenerator(new JavaClassRegistry());
|
|
||||||
return generator.convert(tree);
|
|
||||||
|
SyntaxTreeGenerator generator = new SyntaxTreeGenerator(new JavaClassRegistry(generateJavaLangNames()));
|
||||||
|
return generator.convert(tree);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> generateJavaLangNames(){
|
||||||
|
List<String> ret = new ArrayList<>();
|
||||||
|
|
||||||
|
//TODO: Eigentlich sind es noch viele mehr:
|
||||||
|
ret.add("java.lang.String");
|
||||||
|
ret.add("java.lang.Boolean");
|
||||||
|
ret.add("java.lang.Integer");
|
||||||
|
ret.add("java.lang.Double");
|
||||||
|
ret.add("java.lang.Float");
|
||||||
|
ret.add("java.lang.Long");
|
||||||
|
ret.add("java.lang.Byte");
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import org.antlr.v4.runtime.CommonTokenStream;
|
|||||||
import de.dhbwstuttgart.syntaxtree.*;
|
import de.dhbwstuttgart.syntaxtree.*;
|
||||||
import de.dhbwstuttgart.syntaxtree.modifier.*;
|
import de.dhbwstuttgart.syntaxtree.modifier.*;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -24,7 +25,7 @@ public class RunParser{
|
|||||||
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
||||||
Java8Parser parser = new Java8Parser(tokens);
|
Java8Parser parser = new Java8Parser(tokens);
|
||||||
Java8Parser.CompilationUnitContext tree = parser.compilationUnit();
|
Java8Parser.CompilationUnitContext tree = parser.compilationUnit();
|
||||||
SyntaxTreeGenerator generator = new SyntaxTreeGenerator(new JavaClassRegistry());
|
SyntaxTreeGenerator generator = new SyntaxTreeGenerator(new JavaClassRegistry(new ArrayList<>()));
|
||||||
SourceFile f = generator.convert((Java8Parser.CompilationUnitContext) tree);
|
SourceFile f = generator.convert((Java8Parser.CompilationUnitContext) tree);
|
||||||
String pkgName = f.getPkgName();
|
String pkgName = f.getPkgName();
|
||||||
System.out.println(pkgName);
|
System.out.println(pkgName);
|
||||||
|
@ -7,14 +7,16 @@ import de.dhbwstuttgart.syntaxtree.modifier.fieldModifier.FieldModifier;
|
|||||||
import de.dhbwstuttgart.syntaxtree.modifier.methodModifier.MethodModifier;
|
import de.dhbwstuttgart.syntaxtree.modifier.methodModifier.MethodModifier;
|
||||||
import de.dhbwstuttgart.syntaxtree.statement.Block;
|
import de.dhbwstuttgart.syntaxtree.statement.Block;
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
||||||
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
||||||
import de.dhbwstuttgart.typecheck.*;
|
import de.dhbwstuttgart.typecheck.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.antlr.v4.runtime.Token;
|
import org.antlr.v4.runtime.Token;
|
||||||
import org.antlr.v4.runtime.tree.TerminalNode;
|
import org.antlr.v4.runtime.tree.TerminalNode;
|
||||||
|
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
|
||||||
|
|
||||||
public class SyntaxTreeGenerator{
|
public class SyntaxTreeGenerator{
|
||||||
private JavaClassRegistry reg;
|
private JavaClassRegistry reg;
|
||||||
private String pkgName = "";
|
private String pkgName = "";
|
||||||
@ -44,6 +46,12 @@ public class SyntaxTreeGenerator{
|
|||||||
else{
|
else{
|
||||||
nameString = typeDecl.interfaceDeclaration().normalInterfaceDeclaration().Identifier().toString();
|
nameString = typeDecl.interfaceDeclaration().normalInterfaceDeclaration().Identifier().toString();
|
||||||
}
|
}
|
||||||
|
//Die Generic TypeParameter Definitionen ebenfalls an die JavaClassName-Registry anfügen:
|
||||||
|
if(typeDecl.classDeclaration().normalClassDeclaration().typeParameters() != null){
|
||||||
|
for(Java8Parser.TypeParameterContext tp : typeDecl.classDeclaration().normalClassDeclaration().typeParameters().typeParameterList().typeParameter()){
|
||||||
|
this.reg.add(tp.Identifier().toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
this.reg.add(nameString);
|
this.reg.add(nameString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -55,12 +63,18 @@ public class SyntaxTreeGenerator{
|
|||||||
else{
|
else{
|
||||||
nameString = typeDecl.classDeclaration().normalClassDeclaration().Identifier().toString();
|
nameString = typeDecl.classDeclaration().normalClassDeclaration().Identifier().toString();
|
||||||
}
|
}
|
||||||
|
//Die Generic TypeParameter Definitionen ebenfalls an die JavaClassName-Registry anfügen:
|
||||||
|
if(typeDecl.classDeclaration().normalClassDeclaration().typeParameters() != null){
|
||||||
|
for(Java8Parser.TypeParameterContext tp : typeDecl.classDeclaration().normalClassDeclaration().typeParameters().typeParameterList().typeParameter()){
|
||||||
|
this.reg.add(tp.Identifier().toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
this.reg.add(nameString);
|
this.reg.add(nameString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public JavaClassRegistry getReg(){
|
public JavaClassRegistry getReg(){
|
||||||
return this.reg;
|
return this.reg;
|
||||||
}
|
}
|
||||||
@ -82,7 +96,7 @@ public class SyntaxTreeGenerator{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ClassOrInterface convertClass(Java8Parser.ClassDeclarationContext ctx) {
|
private ClassOrInterface convertClass(Java8Parser.ClassDeclarationContext ctx) {
|
||||||
ClassOrInterface newClass = null;
|
ClassOrInterface newClass;
|
||||||
if(ctx.normalClassDeclaration() != null){
|
if(ctx.normalClassDeclaration() != null){
|
||||||
newClass = convertNormal(ctx.normalClassDeclaration());
|
newClass = convertNormal(ctx.normalClassDeclaration());
|
||||||
}
|
}
|
||||||
@ -107,9 +121,9 @@ public class SyntaxTreeGenerator{
|
|||||||
List<Field> fielddecl = convertFields(ctx.classBody());
|
List<Field> fielddecl = convertFields(ctx.classBody());
|
||||||
GenericDeclarationList genericClassParameters = null;
|
GenericDeclarationList genericClassParameters = null;
|
||||||
Token offset = ctx.getStart();
|
Token offset = ctx.getStart();
|
||||||
RefType superClass = null;
|
RefTypeOrTPH superClass = null;
|
||||||
Boolean isInterface = false;
|
Boolean isInterface = false;
|
||||||
List<RefType> implementedInterfaces = null;
|
List<RefTypeOrTPH> implementedInterfaces = null;
|
||||||
return new ClassOrInterface(modifiers, name, fielddecl, genericClassParameters, superClass, isInterface, implementedInterfaces, offset);
|
return new ClassOrInterface(modifiers, name, fielddecl, genericClassParameters, superClass, isInterface, implementedInterfaces, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,7 +146,7 @@ public class SyntaxTreeGenerator{
|
|||||||
Java8Parser.MethodHeaderContext header = methodDeclarationContext.methodHeader();
|
Java8Parser.MethodHeaderContext header = methodDeclarationContext.methodHeader();
|
||||||
String name = header.methodDeclarator().Identifier().getText();
|
String name = header.methodDeclarator().Identifier().getText();
|
||||||
|
|
||||||
RefType retType;
|
RefTypeOrTPH retType;
|
||||||
if(header.result() != null){
|
if(header.result() != null){
|
||||||
if(header.result().unannType() != null)
|
if(header.result().unannType() != null)
|
||||||
retType = convert(header.result().unannType());
|
retType = convert(header.result().unannType());
|
||||||
@ -184,7 +198,7 @@ public class SyntaxTreeGenerator{
|
|||||||
for(Java8Parser.FieldModifierContext fieldModifierContext : fieldDeclarationContext.fieldModifier()){
|
for(Java8Parser.FieldModifierContext fieldModifierContext : fieldDeclarationContext.fieldModifier()){
|
||||||
//TODO
|
//TODO
|
||||||
}
|
}
|
||||||
RefType fieldType = convert(fieldDeclarationContext.unannType());
|
RefTypeOrTPH fieldType = convert(fieldDeclarationContext.unannType());
|
||||||
for(Java8Parser.VariableDeclaratorContext varCtx : fieldDeclarationContext.variableDeclaratorList().variableDeclarator()){
|
for(Java8Parser.VariableDeclaratorContext varCtx : fieldDeclarationContext.variableDeclaratorList().variableDeclarator()){
|
||||||
String fieldName = varCtx.variableDeclaratorId().getText();
|
String fieldName = varCtx.variableDeclaratorId().getText();
|
||||||
if(varCtx.variableInitializer() != null){
|
if(varCtx.variableInitializer() != null){
|
||||||
@ -198,11 +212,27 @@ public class SyntaxTreeGenerator{
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
private RefType convert(Java8Parser.UnannTypeContext unannTypeContext) {
|
private RefTypeOrTPH convert(Java8Parser.UnannTypeContext unannTypeContext) {
|
||||||
//TODO
|
if(unannTypeContext.unannPrimitiveType()!=null){
|
||||||
return null;
|
throw new NotImplementedException();
|
||||||
|
}else
|
||||||
|
if(unannTypeContext.unannReferenceType().unannArrayType()!=null){
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}else
|
||||||
|
if(unannTypeContext.unannReferenceType().unannTypeVariable()!=null){
|
||||||
|
JavaClassName name = reg.getName(unannTypeContext.unannReferenceType().unannTypeVariable().Identifier().toString());
|
||||||
|
return new RefType(name, unannTypeContext.getStart());
|
||||||
|
}
|
||||||
|
return convert(unannTypeContext.unannReferenceType().unannClassOrInterfaceType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private RefTypeOrTPH convert(Java8Parser.UnannClassOrInterfaceTypeContext unannClassOrInterfaceTypeContext) {
|
||||||
|
String name = unannClassOrInterfaceTypeContext.getText();
|
||||||
|
|
||||||
|
return new RefType(reg.getName(name), unannClassOrInterfaceTypeContext.getStart());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private Modifier convert(Java8Parser.ClassModifierContext ctx){
|
private Modifier convert(Java8Parser.ClassModifierContext ctx){
|
||||||
Modifier newModifier = null;
|
Modifier newModifier = null;
|
||||||
if(ctx.annotation() == null){
|
if(ctx.annotation() == null){
|
||||||
|
@ -3,9 +3,7 @@ package de.dhbwstuttgart.syntaxtree;
|
|||||||
import de.dhbwstuttgart.core.IItemWithOffset;
|
import de.dhbwstuttgart.core.IItemWithOffset;
|
||||||
import de.dhbwstuttgart.typecheck.JavaClassName;
|
import de.dhbwstuttgart.typecheck.JavaClassName;
|
||||||
import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
|
import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
|
||||||
import de.dhbwstuttgart.syntaxtree.statement.Block;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
import de.dhbwstuttgart.syntaxtree.statement.Expr;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
|
||||||
import org.antlr.v4.runtime.Token;
|
import org.antlr.v4.runtime.Token;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -20,12 +18,12 @@ public class ClassOrInterface extends GTVDeclarationContext implements IItemWith
|
|||||||
private List<Field> fielddecl = new ArrayList<>();
|
private List<Field> fielddecl = new ArrayList<>();
|
||||||
private GenericDeclarationList genericClassParameters;
|
private GenericDeclarationList genericClassParameters;
|
||||||
private Token offset;
|
private Token offset;
|
||||||
private RefType superClass;
|
private RefTypeOrTPH superClass;
|
||||||
protected boolean isInterface;
|
protected boolean isInterface;
|
||||||
private List<RefType> implementedInterfaces;
|
private List<RefTypeOrTPH> implementedInterfaces;
|
||||||
|
|
||||||
public ClassOrInterface(Modifiers modifiers, JavaClassName name, List<Field> fielddecl, GenericDeclarationList genericClassParameters,
|
public ClassOrInterface(Modifiers modifiers, JavaClassName name, List<Field> fielddecl, GenericDeclarationList genericClassParameters,
|
||||||
RefType superClass, Boolean isInterface, List<RefType> implementedInterfaces, Token offset){
|
RefTypeOrTPH superClass, Boolean isInterface, List<RefTypeOrTPH> implementedInterfaces, Token offset){
|
||||||
if(modifiers != null){
|
if(modifiers != null){
|
||||||
this.modifiers = modifiers;
|
this.modifiers = modifiers;
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree;
|
package de.dhbwstuttgart.syntaxtree;
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.modifier.methodModifier.MethodModifier;
|
import de.dhbwstuttgart.syntaxtree.modifier.methodModifier.MethodModifier;
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
import org.antlr.v4.runtime.Token;
|
import org.antlr.v4.runtime.Token;
|
||||||
import org.apache.bcel.Constants;
|
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
|
|
||||||
import de.dhbwstuttgart.typecheck.JavaClassName;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.statement.Block;
|
import de.dhbwstuttgart.syntaxtree.statement.Block;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -14,7 +11,7 @@ import java.util.List;
|
|||||||
public class Constructor extends Method {
|
public class Constructor extends Method {
|
||||||
|
|
||||||
|
|
||||||
public Constructor(String name, RefType returnType, List<MethodModifier> modifiers, ParameterList parameterList, Block block, GenericDeclarationList gtvDeclarations, Token offset) {
|
public Constructor(String name, RefTypeOrTPH returnType, List<MethodModifier> modifiers, ParameterList parameterList, Block block, GenericDeclarationList gtvDeclarations, Token offset) {
|
||||||
super(name, returnType, modifiers, parameterList, block, gtvDeclarations, offset);
|
super(name, returnType, modifiers, parameterList, block, gtvDeclarations, offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree;
|
package de.dhbwstuttgart.syntaxtree;
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ExceptionList
|
public class ExceptionList
|
||||||
{
|
{
|
||||||
private List<RefType> exceptions;
|
private List<RefTypeOrTPH> exceptions;
|
||||||
|
|
||||||
public ExceptionList(List<RefType> exceptions){
|
public ExceptionList(List<RefTypeOrTPH> exceptions){
|
||||||
this.exceptions = exceptions;
|
this.exceptions = exceptions;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree;
|
package de.dhbwstuttgart.syntaxtree;
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.modifier.fieldModifier.FieldModifier;
|
import de.dhbwstuttgart.syntaxtree.modifier.fieldModifier.FieldModifier;
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
import org.antlr.v4.runtime.Token;
|
import org.antlr.v4.runtime.Token;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -9,12 +9,14 @@ import java.util.List;
|
|||||||
public class Field extends GTVDeclarationContext implements Generic {
|
public class Field extends GTVDeclarationContext implements Generic {
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
|
private RefTypeOrTPH type;
|
||||||
|
|
||||||
|
|
||||||
private GenericDeclarationList genericParameters;
|
private GenericDeclarationList genericParameters;
|
||||||
|
|
||||||
public Field(String name, RefType type, List<? extends FieldModifier> modifier, Token offset){
|
public Field(String name, RefTypeOrTPH type, List<? extends FieldModifier> modifier, Token offset){
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,17 +1,10 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree;
|
package de.dhbwstuttgart.syntaxtree;
|
||||||
|
|
||||||
import com.sun.org.apache.xpath.internal.operations.Mod;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.modifier.fieldModifier.FieldModifier;
|
import de.dhbwstuttgart.syntaxtree.modifier.fieldModifier.FieldModifier;
|
||||||
import org.antlr.v4.runtime.Token;
|
import org.antlr.v4.runtime.Token;
|
||||||
import org.apache.bcel.generic.FieldGen;
|
|
||||||
import org.apache.bcel.generic.FieldInstruction;
|
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
import org.apache.bcel.generic.ObjectType;
|
|
||||||
import org.apache.bcel.Const;
|
|
||||||
import org.apache.bcel.generic.ClassGen;
|
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.statement.Expr;
|
import de.dhbwstuttgart.syntaxtree.statement.Expr;
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -29,7 +22,7 @@ public class FieldDeclaration extends Field{
|
|||||||
* Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig.
|
* Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig.
|
||||||
* Kein nachträgliches hinzfügen von Informationen oder aufrufen von parserPostProcessing ist notwendig.
|
* Kein nachträgliches hinzfügen von Informationen oder aufrufen von parserPostProcessing ist notwendig.
|
||||||
*/
|
*/
|
||||||
public FieldDeclaration(String name, RefType typ, List<FieldModifier> modifier, Expr value, Token offset){
|
public FieldDeclaration(String name, RefTypeOrTPH typ, List<FieldModifier> modifier, Expr value, Token offset){
|
||||||
super(name, typ, modifier, offset);//Dieser Deklarator wird nicht vom Parser aufgerufen. Dadurch gibt es auch keinen Offset
|
super(name, typ, modifier, offset);//Dieser Deklarator wird nicht vom Parser aufgerufen. Dadurch gibt es auch keinen Offset
|
||||||
this.wert = value;
|
this.wert = value;
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree;
|
package de.dhbwstuttgart.syntaxtree;
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
|
|
||||||
public class FormalParameter extends SyntaxTreeNode
|
public class FormalParameter extends SyntaxTreeNode
|
||||||
{
|
{
|
||||||
private RefType type;
|
private RefTypeOrTPH type;
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
public FormalParameter(String name, RefType type, int offset){
|
public FormalParameter(String name, RefTypeOrTPH type, int offset){
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree;
|
package de.dhbwstuttgart.syntaxtree;
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -20,14 +20,14 @@ public class GenericTypeVar extends SyntaxTreeNode
|
|||||||
/**
|
/**
|
||||||
* Hier sind die Bounds in Form von Type-Objekten abgespeichert
|
* Hier sind die Bounds in Form von Type-Objekten abgespeichert
|
||||||
*/
|
*/
|
||||||
List<RefType> bounds=new ArrayList<RefType>();
|
List<RefTypeOrTPH> bounds=new ArrayList<RefTypeOrTPH>();
|
||||||
private int endOffset;
|
private int endOffset;
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
public GenericTypeVar(String s, List<RefType> bounds, int offset, int endOffset)
|
public GenericTypeVar(String s, List<RefTypeOrTPH> bounds, int offset, int endOffset)
|
||||||
{
|
{
|
||||||
name = s;
|
name = s;
|
||||||
if(bounds != null)for(RefType t : bounds){
|
if(bounds != null)for(RefTypeOrTPH t : bounds){
|
||||||
//if(t!=null)this.extendVars.add(t);
|
//if(t!=null)this.extendVars.add(t);
|
||||||
}
|
}
|
||||||
//this.genericTypeVar = new RefType(s,offset);
|
//this.genericTypeVar = new RefType(s,offset);
|
||||||
@ -39,7 +39,7 @@ public class GenericTypeVar extends SyntaxTreeNode
|
|||||||
return this.endOffset;
|
return this.endOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<RefType> getBounds()
|
public List<RefTypeOrTPH> getBounds()
|
||||||
{
|
{
|
||||||
return bounds;
|
return bounds;
|
||||||
}
|
}
|
||||||
|
@ -3,17 +3,12 @@ package de.dhbwstuttgart.syntaxtree;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.modifier.fieldModifier.FieldModifier;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.modifier.methodModifier.MethodModifier;
|
import de.dhbwstuttgart.syntaxtree.modifier.methodModifier.MethodModifier;
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
import org.antlr.v4.runtime.Token;
|
import org.antlr.v4.runtime.Token;
|
||||||
import org.apache.bcel.Constants;
|
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
|
|
||||||
import de.dhbwstuttgart.core.IItemWithOffset;
|
import de.dhbwstuttgart.core.IItemWithOffset;
|
||||||
import de.dhbwstuttgart.typecheck.JavaClassName;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
|
import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
|
||||||
import de.dhbwstuttgart.syntaxtree.modifier.Static;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.statement.Block;
|
import de.dhbwstuttgart.syntaxtree.statement.Block;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,7 +29,7 @@ public class Method extends Field implements IItemWithOffset
|
|||||||
private List<String> types_in_parameterlist = new ArrayList<>();
|
private List<String> types_in_parameterlist = new ArrayList<>();
|
||||||
private Modifiers modifiers;
|
private Modifiers modifiers;
|
||||||
|
|
||||||
public Method(String name, RefType returnType, List<MethodModifier> modifiers, ParameterList parameterList, Block block,
|
public Method(String name, RefTypeOrTPH returnType, List<MethodModifier> modifiers, ParameterList parameterList, Block block,
|
||||||
GenericDeclarationList gtvDeclarations, Token offset) {
|
GenericDeclarationList gtvDeclarations, Token offset) {
|
||||||
super(name, returnType, modifiers, offset);
|
super(name, returnType, modifiers, offset);
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
|
|
||||||
package de.dhbwstuttgart.syntaxtree.statement;
|
package de.dhbwstuttgart.syntaxtree.statement;
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
|
|
||||||
|
|
||||||
public class Assign extends ExprStmt
|
public class Assign extends ExprStmt
|
||||||
{
|
{
|
||||||
|
|
||||||
public Assign(RefType type, int offset) {
|
public Assign(RefTypeOrTPH type, int offset) {
|
||||||
super(type, offset);
|
super(type, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,16 +1,11 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree.statement;
|
package de.dhbwstuttgart.syntaxtree.statement;
|
||||||
import java.util.Hashtable;
|
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
|
||||||
import org.apache.bcel.generic.ClassGen;
|
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
|
|
||||||
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
|
|
||||||
|
|
||||||
public class CastExpr extends Expr
|
public class CastExpr extends Expr
|
||||||
{
|
{
|
||||||
public CastExpr(RefType castType, Expr expr, int offset)
|
public CastExpr(RefTypeOrTPH castType, Expr expr, int offset)
|
||||||
{
|
{
|
||||||
super(null, 0);
|
super(null, 0);
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,4 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree.statement;
|
package de.dhbwstuttgart.syntaxtree.statement;
|
||||||
import java.util.Hashtable;
|
|
||||||
|
|
||||||
import org.apache.bcel.generic.BIPUSH;
|
|
||||||
import org.apache.bcel.generic.ClassGen;
|
|
||||||
import org.apache.bcel.generic.ConstantPoolGen;
|
|
||||||
import org.apache.bcel.generic.InstructionFactory;
|
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
import org.apache.bcel.generic.LDC;
|
|
||||||
import org.apache.bcel.generic.LDC2_W;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class DoubleLiteral extends Literal
|
public class DoubleLiteral extends Literal
|
||||||
|
@ -1,17 +1,14 @@
|
|||||||
|
|
||||||
package de.dhbwstuttgart.syntaxtree.statement;
|
package de.dhbwstuttgart.syntaxtree.statement;
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
import de.dhbwstuttgart.core.MyCompiler;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
||||||
|
|
||||||
public abstract class Executeable extends SyntaxTreeNode
|
public abstract class Executeable extends SyntaxTreeNode
|
||||||
{
|
{
|
||||||
private RefType type;
|
private RefTypeOrTPH type;
|
||||||
|
|
||||||
public Executeable(RefType type, int offset) {
|
public Executeable(RefTypeOrTPH type, int offset) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,19 +1,13 @@
|
|||||||
|
|
||||||
package de.dhbwstuttgart.syntaxtree.statement;
|
package de.dhbwstuttgart.syntaxtree.statement;
|
||||||
|
|
||||||
import java.util.Hashtable;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
|
||||||
import org.apache.bcel.generic.ClassGen;
|
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public abstract class Expr extends Executeable
|
public abstract class Expr extends Executeable
|
||||||
{
|
{
|
||||||
|
|
||||||
public Expr(RefType type, int offset) {
|
public Expr(RefTypeOrTPH type, int offset) {
|
||||||
super(type, offset);
|
super(type, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree.statement;
|
package de.dhbwstuttgart.syntaxtree.statement;
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
|
|
||||||
public abstract class ExprStmt extends Executeable{
|
public abstract class ExprStmt extends Executeable{
|
||||||
|
|
||||||
public ExprStmt(RefType type, int offset) {
|
public ExprStmt(RefTypeOrTPH type, int offset) {
|
||||||
super(type, offset);
|
super(type, offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,13 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree.statement;
|
package de.dhbwstuttgart.syntaxtree.statement;
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.Hashtable;
|
|
||||||
|
|
||||||
import org.apache.bcel.generic.ClassGen;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class InstanceOf extends BinaryExpr
|
public class InstanceOf extends BinaryExpr
|
||||||
{
|
{
|
||||||
public Expr expr;
|
public Expr expr;
|
||||||
private RefType reftype;
|
private RefTypeOrTPH reftype;
|
||||||
// private boolean is_instance = false;
|
// private boolean is_instance = false;
|
||||||
|
|
||||||
|
|
||||||
@ -27,7 +22,7 @@ public class InstanceOf extends BinaryExpr
|
|||||||
this.expr = exp;
|
this.expr = exp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set_Type(RefType typ)
|
public void set_Type(RefTypeOrTPH typ)
|
||||||
{
|
{
|
||||||
this.reftype = typ;
|
this.reftype = typ;
|
||||||
}
|
}
|
||||||
|
@ -1,23 +1,7 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree.statement;
|
package de.dhbwstuttgart.syntaxtree.statement;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import org.apache.bcel.Const;
|
|
||||||
import org.apache.bcel.classfile.BootstrapMethod;
|
|
||||||
import org.apache.bcel.classfile.ConstantMethodHandle;
|
|
||||||
import org.apache.bcel.classfile.ConstantMethodType;
|
|
||||||
import org.apache.bcel.classfile.InnerClass;
|
|
||||||
import org.apache.bcel.generic.InstructionFactory;
|
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
|
|
||||||
import de.dhbwstuttgart.typecheck.JavaClassName;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.FormalParameter;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.ParameterList;
|
import de.dhbwstuttgart.syntaxtree.ParameterList;
|
||||||
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.FunN;
|
import de.dhbwstuttgart.syntaxtree.type.FunN;
|
||||||
import de.dhbwstuttgart.syntaxtree.type.FunVoidN;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author A10023 - Andreas Stadelmeier
|
* @author A10023 - Andreas Stadelmeier
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree.statement;
|
package de.dhbwstuttgart.syntaxtree.statement;
|
||||||
|
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
|
|
||||||
public abstract class Literal extends Expr
|
public abstract class Literal extends Expr
|
||||||
{
|
{
|
||||||
@ -11,7 +11,7 @@ public abstract class Literal extends Expr
|
|||||||
|
|
||||||
private boolean primitiveFlag=true;
|
private boolean primitiveFlag=true;
|
||||||
|
|
||||||
public Literal(RefType o, int i) {
|
public Literal(RefTypeOrTPH o, int i) {
|
||||||
super(null, i);
|
super(null, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,14 +1,7 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree.statement;
|
package de.dhbwstuttgart.syntaxtree.statement;
|
||||||
import java.util.Hashtable;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
import org.apache.bcel.generic.ClassGen;
|
|
||||||
import org.apache.bcel.generic.InstructionFactory;
|
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class NewArray extends Expr
|
public class NewArray extends Expr
|
||||||
@ -17,7 +10,7 @@ public class NewArray extends Expr
|
|||||||
{
|
{
|
||||||
super(null,variableLength);
|
super(null,variableLength);
|
||||||
}
|
}
|
||||||
private RefType type;
|
private RefTypeOrTPH type;
|
||||||
public List<Expr> expr;
|
public List<Expr> expr;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,16 +1,8 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree.statement;
|
package de.dhbwstuttgart.syntaxtree.statement;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.Hashtable;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.bcel.Constants;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
import org.apache.bcel.generic.ClassGen;
|
|
||||||
import org.apache.bcel.generic.InstructionConstants;
|
|
||||||
|
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -24,7 +16,7 @@ public class NewClass extends Expr
|
|||||||
|
|
||||||
private ArgumentList arglist;
|
private ArgumentList arglist;
|
||||||
private boolean isStatement = false;
|
private boolean isStatement = false;
|
||||||
private List<RefType> parameterList = new ArrayList<>();
|
private List<RefTypeOrTPH> parameterList = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
public ArgumentList getArgumentList()
|
public ArgumentList getArgumentList()
|
||||||
|
@ -1,22 +1,13 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree.statement;
|
package de.dhbwstuttgart.syntaxtree.statement;
|
||||||
|
|
||||||
import java.util.Enumeration;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPH;
|
||||||
import java.util.Hashtable;
|
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
|
||||||
import org.apache.bcel.generic.ClassGen;
|
|
||||||
import org.apache.bcel.generic.ConstantPoolGen;
|
|
||||||
import org.apache.bcel.generic.InstructionFactory;
|
|
||||||
import org.apache.bcel.generic.InstructionList;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public abstract class Statement extends Executeable
|
public abstract class Statement extends Executeable
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
public Statement(RefType type, int offset)
|
public Statement(RefTypeOrTPH type, int offset)
|
||||||
{
|
{
|
||||||
super(type,offset);
|
super(type,offset);
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ public class ExtendsWildcardType extends WildcardType{
|
|||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Standard Konstruktor für eine ExtendsWildcard
|
* Standard Konstruktor für eine ExtendsWildcard
|
||||||
*/
|
*/
|
||||||
public ExtendsWildcardType ( RefType extendsType,Token offset)
|
public ExtendsWildcardType (RefType extendsType, Token offset)
|
||||||
{
|
{
|
||||||
super(extendsType, offset);
|
super(extendsType, offset);
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree.type;
|
package de.dhbwstuttgart.syntaxtree.type;
|
||||||
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.dhbwstuttgart.typecheck.JavaClassName;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see Spezifikation "Complete Typeinference in Java 8" von Martin Plümicke
|
* @see Spezifikation "Complete Typeinference in Java 8" von Martin Plümicke
|
||||||
* "interface FunN<R,T1, T2, ... ,TN> { R apply(T1 arg1, T2 arg2, ... , TN argN); }"
|
* "interface FunN<R,T1, T2, ... ,TN> { R apply(T1 arg1, T2 arg2, ... , TN argN); }"
|
||||||
@ -17,8 +14,8 @@ import de.dhbwstuttgart.typecheck.JavaClassName;
|
|||||||
*/
|
*/
|
||||||
public class FunN extends RefType {
|
public class FunN extends RefType {
|
||||||
|
|
||||||
private RefType R;
|
private RefTypeOrTPH R;
|
||||||
private List<? extends RefType> T;
|
private List<? extends RefTypeOrTPH> T;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @author Andreas Stadelmeier, a10023
|
||||||
@ -28,7 +25,7 @@ public class FunN extends RefType {
|
|||||||
* @param T
|
* @param T
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public FunN(RefType R, List<? extends RefType> T) {
|
public FunN(RefTypeOrTPH R, List<? extends RefTypeOrTPH> T) {
|
||||||
super(null,null);
|
super(null,null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,8 +4,6 @@ package de.dhbwstuttgart.syntaxtree.type;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.dhbwstuttgart.typecheck.JavaClassName;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FunVoid<T1,...,TN> {
|
* FunVoid<T1,...,TN> {
|
||||||
* void apply(T1 arg1, ... TN argN);
|
* void apply(T1 arg1, ... TN argN);
|
||||||
@ -15,8 +13,8 @@ import de.dhbwstuttgart.typecheck.JavaClassName;
|
|||||||
*/
|
*/
|
||||||
public class FunVoidN extends FunN {
|
public class FunVoidN extends FunN {
|
||||||
|
|
||||||
private RefType R;
|
private RefTypeOrTPH R;
|
||||||
private List<RefType> T;
|
private List<RefTypeOrTPH> T;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @author Andreas Stadelmeier, a10023
|
||||||
@ -25,7 +23,7 @@ public class FunVoidN extends FunN {
|
|||||||
* @param T
|
* @param T
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public FunVoidN(List<RefType> T) {
|
public FunVoidN(List<RefTypeOrTPH> T) {
|
||||||
super(null,T);
|
super(null,T);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,7 +34,7 @@ public class FunVoidN extends FunN {
|
|||||||
* Dabei werden bestimmte, von RefType geerbte, Parameter angepasst. Dies ist wichtig für den Typinferenzalgorithmus.
|
* Dabei werden bestimmte, von RefType geerbte, Parameter angepasst. Dies ist wichtig für den Typinferenzalgorithmus.
|
||||||
*/
|
*/
|
||||||
private void calculateNewParalist(){
|
private void calculateNewParalist(){
|
||||||
List<RefType> t = new ArrayList<>();
|
List<RefTypeOrTPH> t = new ArrayList<>();
|
||||||
if(T!=null)t.addAll(T);
|
if(T!=null)t.addAll(T);
|
||||||
this.parameter = t;
|
this.parameter = t;
|
||||||
}
|
}
|
||||||
|
@ -1,27 +1,28 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree.type;
|
package de.dhbwstuttgart.syntaxtree.type;
|
||||||
|
|
||||||
|
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
||||||
|
import de.dhbwstuttgart.typecheck.JavaClassName;
|
||||||
|
import org.antlr.v4.runtime.Token;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.dhbwstuttgart.typecheck.JavaClassName;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
|
||||||
import org.antlr.v4.runtime.Token;
|
|
||||||
|
|
||||||
|
public class RefType extends RefTypeOrTPH
|
||||||
public class RefType extends SyntaxTreeNode
|
{
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* Ist IsArray auf true, muss beim Codegen ein Zeichen [ gesetzt werden
|
* Ist IsArray auf true, muss beim Codegen ein Zeichen [ gesetzt werden
|
||||||
* Bsp.: 15| tag = CONSTANT_Utf8, length = 22, ([Ljava/lang/String;)V
|
* Bsp.: 15| tag = CONSTANT_Utf8, length = 22, ([Ljava/lang/String;)V
|
||||||
* Ist IsArray auf false, muss beim Codegen ein Zeichen [ gesetzt werden
|
* Ist IsArray auf false, muss beim Codegen ein Zeichen [ gesetzt werden
|
||||||
* Bsp.: 9| tag = CONSTANT_Utf8, length = 21, (Ljava/lang/String;)V
|
* Bsp.: 9| tag = CONSTANT_Utf8, length = 21, (Ljava/lang/String;)V
|
||||||
*/
|
*/
|
||||||
private boolean IsArray = false;
|
private boolean IsArray = false;
|
||||||
protected JavaClassName name;
|
protected JavaClassName name;
|
||||||
protected List<RefType> parameter = null;
|
protected List<RefTypeOrTPH> parameter = null;
|
||||||
/**
|
/**
|
||||||
* Ist primitiveFlag auf true, muss beim Codegen dieser Reftype durch
|
* Ist primitiveFlag auf true, muss beim Codegen dieser Reftype durch
|
||||||
* den primitiven Datentyp ersetzt werden
|
* den primitiven Datentyp ersetzt werden
|
||||||
*
|
*
|
||||||
* Bsp: java.lang.Integer mit Flag wird dann zu [int]
|
* Bsp: java.lang.Integer mit Flag wird dann zu [int]
|
||||||
*/
|
*/
|
||||||
private boolean primitiveFlag=false;
|
private boolean primitiveFlag=false;
|
||||||
@ -30,7 +31,7 @@ public class RefType extends SyntaxTreeNode
|
|||||||
{
|
{
|
||||||
this.name = (fullyQualifiedName);
|
this.name = (fullyQualifiedName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
int hash = 0;
|
int hash = 0;
|
||||||
@ -39,7 +40,7 @@ public class RefType extends SyntaxTreeNode
|
|||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RefType(JavaClassName fullyQualifiedName, List<RefType> parameter, Token offset)
|
public RefType(JavaClassName fullyQualifiedName, List<RefTypeOrTPH> parameter, Token offset)
|
||||||
{
|
{
|
||||||
this(fullyQualifiedName, offset);
|
this(fullyQualifiedName, offset);
|
||||||
if(parameter != null && parameter.size()>0)this.parameter = parameter;
|
if(parameter != null && parameter.size()>0)this.parameter = parameter;
|
||||||
@ -50,7 +51,7 @@ public class RefType extends SyntaxTreeNode
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<RefType> getParaList(){
|
public List<RefTypeOrTPH> getParaList(){
|
||||||
if(this.parameter==null)return new ArrayList<>();
|
if(this.parameter==null)return new ArrayList<>();
|
||||||
return this.parameter;
|
return this.parameter;
|
||||||
}
|
}
|
||||||
@ -93,5 +94,6 @@ public class RefType extends SyntaxTreeNode
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
src/de/dhbwstuttgart/syntaxtree/type/RefTypeOrTPH.java
Executable file
12
src/de/dhbwstuttgart/syntaxtree/type/RefTypeOrTPH.java
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
package de.dhbwstuttgart.syntaxtree.type;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import de.dhbwstuttgart.typecheck.JavaClassName;
|
||||||
|
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
||||||
|
import org.antlr.v4.runtime.Token;
|
||||||
|
|
||||||
|
|
||||||
|
public abstract class RefTypeOrTPH extends SyntaxTreeNode
|
||||||
|
{ }
|
||||||
|
|
@ -28,7 +28,7 @@ public class SuperWildcardType extends WildcardType{
|
|||||||
* Beispiel: ? super Integer.
|
* Beispiel: ? super Integer.
|
||||||
* Integer wird zurückgegeben.
|
* Integer wird zurückgegeben.
|
||||||
*/
|
*/
|
||||||
public RefType get_SuperType()
|
public RefTypeOrTPH get_SuperType()
|
||||||
{
|
{
|
||||||
return this.innerType;
|
return this.innerType;
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ import org.antlr.v4.runtime.Token;
|
|||||||
* @author J�rg B�uerle
|
* @author J�rg B�uerle
|
||||||
* @version $Date: 2013/06/19 12:45:37 $
|
* @version $Date: 2013/06/19 12:45:37 $
|
||||||
*/
|
*/
|
||||||
public class TypePlaceholder extends RefType
|
public class TypePlaceholder extends RefTypeOrTPH
|
||||||
{
|
{
|
||||||
|
|
||||||
private static Hashtable<String, TypePlaceholder> m_TypePlaceholdersRegistry = new Hashtable<String, TypePlaceholder>();
|
private static Hashtable<String, TypePlaceholder> m_TypePlaceholdersRegistry = new Hashtable<String, TypePlaceholder>();
|
||||||
@ -25,11 +25,9 @@ public class TypePlaceholder extends RefType
|
|||||||
* Privater Konstruktor - Eine TypePlaceholder-Variable wird �ber die
|
* Privater Konstruktor - Eine TypePlaceholder-Variable wird �ber die
|
||||||
* Factory-Methode <code>fresh()</code> erzeugt.
|
* Factory-Methode <code>fresh()</code> erzeugt.
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @param typeName Der Name der TypePlaceholder-Variablen
|
|
||||||
*/
|
*/
|
||||||
private TypePlaceholder(String name)
|
private TypePlaceholder(String name)
|
||||||
{
|
{
|
||||||
super(null,null);
|
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +59,6 @@ public class TypePlaceholder extends RefType
|
|||||||
* @author Andreas Stadelmeier, a10023
|
* @author Andreas Stadelmeier, a10023
|
||||||
* Ruft die TypePlaceholder.fresh()-Methode auf.
|
* Ruft die TypePlaceholder.fresh()-Methode auf.
|
||||||
* Fügt zusätzlich einen Replacementlistener hinzu.
|
* Fügt zusätzlich einen Replacementlistener hinzu.
|
||||||
* @param listener
|
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static TypePlaceholder fresh(Token position){
|
public static TypePlaceholder fresh(Token position){
|
||||||
@ -71,7 +68,6 @@ public class TypePlaceholder extends RefType
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: J�rg B�uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param Object
|
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public boolean equals(Object obj)
|
public boolean equals(Object obj)
|
||||||
|
@ -1,12 +1,8 @@
|
|||||||
package de.dhbwstuttgart.syntaxtree.type;
|
package de.dhbwstuttgart.syntaxtree.type;
|
||||||
|
|
||||||
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
|
||||||
import de.dhbwstuttgart.typecheck.JavaClassName;
|
import de.dhbwstuttgart.typecheck.JavaClassName;
|
||||||
import org.antlr.v4.runtime.Token;
|
import org.antlr.v4.runtime.Token;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
|
|
||||||
public class Void extends RefType
|
public class Void extends RefType
|
||||||
{
|
{
|
||||||
|
@ -9,9 +9,9 @@ import org.antlr.v4.runtime.Token;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public abstract class WildcardType extends RefType{
|
public abstract class WildcardType extends RefType {
|
||||||
|
|
||||||
protected RefType innerType = null;
|
protected RefTypeOrTPH innerType = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
@ -37,7 +37,7 @@ public abstract class WildcardType extends RefType{
|
|||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Die Allgemeine Wildcard enthält keinen Typen.
|
* Die Allgemeine Wildcard enthält keinen Typen.
|
||||||
*/
|
*/
|
||||||
public RefType GetWildcardType()
|
public RefTypeOrTPH GetWildcardType()
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,12 @@ import java.util.List;
|
|||||||
public class JavaClassRegistry {
|
public class JavaClassRegistry {
|
||||||
public List<JavaClassName> existingClasses = new ArrayList<>();
|
public List<JavaClassName> existingClasses = new ArrayList<>();
|
||||||
|
|
||||||
|
public JavaClassRegistry(List<String> initialNames){
|
||||||
|
for(String name : initialNames){
|
||||||
|
existingClasses.add(new JavaClassName(name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void add(String className){
|
public void add(String className){
|
||||||
existingClasses.add(new JavaClassName(className));
|
existingClasses.add(new JavaClassName(className));
|
||||||
}
|
}
|
||||||
|
5
test/parser/StructuralTypes.jav
Normal file
5
test/parser/StructuralTypes.jav
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
class A {
|
||||||
|
mt(x, y, z) { return x.sub(y).add(z); }
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user