while Statement implemented

This commit is contained in:
FelixKrespach 2017-08-17 15:08:30 +02:00
parent 0cf8f82283
commit 856f9b059d
12 changed files with 107 additions and 17 deletions

22
.idea/libraries/lib.xml generated Normal file
View File

@ -0,0 +1,22 @@
<component name="libraryTable">
<library name="lib">
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/log4j-1.2.12.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/guava-10.0.1.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/bcel-6.1-SNAPSHOT.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/bcel-6.1-SNAPSHOT-sources.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/annotations-2.0.1.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/guava-15.0.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/junit-4.0.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/commons-bcel6-6.0-SNAPSHOT.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/reflections-0.9.10-javadoc.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/reflections-0.9.10.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/cloning.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/javassist-3.19.0-GA.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/reflections-0.9.10-sources.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/antlr-complete.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

9
classes/classes.iml Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

9
doc/doc.iml Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

11
src/JavaCompilerCore1.iml Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -333,8 +333,9 @@ public class StatementGenerator {
} }
private Statement convert(Java8Parser.WhileStatementContext stmt){ private Statement convert(Java8Parser.WhileStatementContext stmt){
//TODO Expression expr = convert(stmt.expression());
throw new NotImplementedException(); Statement block = convert(stmt.statement());
return new WhileStmt(expr, block,stmt.getStart());
} }
private Statement convert(Java8Parser.WhileStatementNoShortIfContext stmt){ private Statement convert(Java8Parser.WhileStatementNoShortIfContext stmt){
@ -441,8 +442,11 @@ public class StatementGenerator {
} }
private Statement convert(Java8Parser.ReturnStatementContext stmt){ private Statement convert(Java8Parser.ReturnStatementContext stmt){
return new Return(convert(stmt.expression()),stmt.getStart()); if(stmt.expression() != null){
//throw new NotImplementedException(); return new Return( convert(stmt.expression()),stmt.getStart());
}else{
return new ReturnVoid(stmt.getStart());
}
} }
private Statement convert(Java8Parser.ThrowStatementContext stmt){ private Statement convert(Java8Parser.ThrowStatementContext stmt){

View File

@ -12,7 +12,8 @@ public class SyntacticSugar {
Statement lastStmt = statements.get(statements.size() - 1); Statement lastStmt = statements.get(statements.size() - 1);
if (lastStmt instanceof Return) return statements; if (lastStmt instanceof Return) return statements;
if (lastStmt instanceof WhileStmt) { if (lastStmt instanceof WhileStmt) {
if (hasReturn(((WhileStmt) lastStmt).loop_block)) return statements; //TODO
//if (hasReturn(((WhileStmt) lastStmt).loopBlock)) return statements;
} else if (lastStmt instanceof IfStmt) { } else if (lastStmt instanceof IfStmt) {
if (hasReturn(((IfStmt) lastStmt).then_block) if (hasReturn(((IfStmt) lastStmt).then_block)
&& hasReturn(((IfStmt) lastStmt).else_block)) return statements; && hasReturn(((IfStmt) lastStmt).else_block)) return statements;

View File

@ -2,20 +2,24 @@ package de.dhbwstuttgart.syntaxtree.statement;
import de.dhbwstuttgart.syntaxtree.StatementVisitor; import de.dhbwstuttgart.syntaxtree.StatementVisitor;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import de.dhbwstuttgart.typeinference.assumptions.TypeInferenceBlockInformation; import de.dhbwstuttgart.typeinference.assumptions.TypeInferenceBlockInformation;
import de.dhbwstuttgart.typeinference.constraints.ConstraintSet; import de.dhbwstuttgart.typeinference.constraints.ConstraintSet;
import de.dhbwstuttgart.typeinference.assumptions.TypeInferenceInformation; import de.dhbwstuttgart.typeinference.assumptions.TypeInferenceInformation;
import de.dhbwstuttgart.exceptions.NotImplementedException; import de.dhbwstuttgart.exceptions.NotImplementedException;
import org.antlr.v4.runtime.Token;
public class WhileStmt extends Statement public class WhileStmt extends Statement
{ {
public WhileStmt(int offset, int variableLength) public final Expression expr;
{ public final Statement loopBlock;
super(null,null);
}
public Expression expr; public WhileStmt(Expression expr, Statement loopBlock, Token offset)
public Block loop_block; {
super(TypePlaceholder.fresh(offset), offset);
this.expr = expr;
this.loopBlock = loopBlock;
}
/** /**
* <br/>Author: Martin Pl�micke * <br/>Author: Martin Pl�micke
@ -23,7 +27,7 @@ public class WhileStmt extends Statement
*/ */
public String toString() public String toString()
{ {
return "WHILE " + loop_block.toString(); return "WHILE " + loopBlock.toString();
} }
@Override @Override

View File

@ -1,7 +1,6 @@
package de.dhbwstuttgart.typecheck; package de.dhbwstuttgart.typecheck;
import java.util.ArrayList; import java.util.*;
import java.util.List;
/** /**
* Speichert die Klassen im aktuellen Projektscope * Speichert die Klassen im aktuellen Projektscope
@ -17,7 +16,7 @@ public class JavaClassRegistry {
} }
/** /**
* Fügt ein gesamtes Package der ClassRegistry hinzu. * F<EFBFBD>gt ein gesamtes Package der ClassRegistry hinzu.
* Dies geschieht beispielsweise, wenn der Benutzer ein "import package.*;" statement verwendet * Dies geschieht beispielsweise, wenn der Benutzer ein "import package.*;" statement verwendet
* @param packageName * @param packageName
*/ */
@ -55,6 +54,8 @@ public class JavaClassRegistry {
} }
public boolean contains(String whole) { public boolean contains(String whole) {
return existingClasses.contains(new JavaClassName(whole)); boolean ret = existingClasses.contains(new JavaClassName(whole));
if(ret == false)existingClasses.add(getName(whole));
return true;
} }
} }

View File

@ -14,7 +14,7 @@ public class RunParserTest {
@Test @Test
public void testMain() throws Exception { public void testMain() throws Exception {
String[] args = new String[1]; String[] args = new String[1];
args[0] = rootDirectory+"ImportTest2.jav"; args[0] = rootDirectory+"WhileTest.jav";
new JavaTXParser().parse(new File(args[0])); new JavaTXParser().parse(new File(args[0]));
} }
} }

View File

@ -0,0 +1,9 @@
class WhileTest{
void methode(){
Boolean test;
while(test){
test = test;
}
return;
}
}

11
test/test.iml Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="true" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

9
tools/tools.iml Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>