diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-11-14 14:30:50 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-11-14 14:30:50 +0000 |
| commit | 8a7cb643ac9b0e895123c176803af15b75f90cf1 (patch) | |
| tree | 046f0b48f76734451fb0c8a39236212e6108bf6f /src/main/java/org/zwobble/couscous/frontends | |
| parent | f398933835e7fa7a80b0abd7feda6790370804c8 (diff) | |
Parse while loops
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 95 |
1 files changed, 29 insertions, 66 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java index c75205d..97474c4 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -6,56 +6,10 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Assignment; -import org.eclipse.jdt.core.dom.Block; -import org.eclipse.jdt.core.dom.BooleanLiteral; -import org.eclipse.jdt.core.dom.ClassInstanceCreation; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.ConditionalExpression; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.ExpressionStatement; -import org.eclipse.jdt.core.dom.FieldAccess; -import org.eclipse.jdt.core.dom.FieldDeclaration; -import org.eclipse.jdt.core.dom.IAnnotationBinding; -import org.eclipse.jdt.core.dom.IBinding; -import org.eclipse.jdt.core.dom.IMethodBinding; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jdt.core.dom.IVariableBinding; -import org.eclipse.jdt.core.dom.IfStatement; -import org.eclipse.jdt.core.dom.InfixExpression; +import org.eclipse.jdt.core.dom.*; import org.eclipse.jdt.core.dom.InfixExpression.Operator; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jdt.core.dom.MethodInvocation; -import org.eclipse.jdt.core.dom.Modifier; -import org.eclipse.jdt.core.dom.NumberLiteral; -import org.eclipse.jdt.core.dom.ReturnStatement; -import org.eclipse.jdt.core.dom.SimpleName; -import org.eclipse.jdt.core.dom.SingleVariableDeclaration; -import org.eclipse.jdt.core.dom.Statement; -import org.eclipse.jdt.core.dom.StringLiteral; -import org.eclipse.jdt.core.dom.ThisExpression; -import org.eclipse.jdt.core.dom.Type; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jdt.core.dom.VariableDeclarationFragment; -import org.eclipse.jdt.core.dom.VariableDeclarationStatement; -import org.zwobble.couscous.ast.AssignableExpressionNode; -import org.zwobble.couscous.ast.AssignmentNode; -import org.zwobble.couscous.ast.ClassNode; -import org.zwobble.couscous.ast.ClassNodeBuilder; +import org.zwobble.couscous.ast.*; import org.zwobble.couscous.ast.ClassNodeBuilder.MethodBuilder; -import org.zwobble.couscous.ast.ConstructorCallNode; -import org.zwobble.couscous.ast.ExpressionNode; -import org.zwobble.couscous.ast.FieldAccessNode; -import org.zwobble.couscous.ast.IfStatementNode; -import org.zwobble.couscous.ast.LiteralNode; -import org.zwobble.couscous.ast.MethodCallNode; -import org.zwobble.couscous.ast.ReturnNode; -import org.zwobble.couscous.ast.StatementNode; -import org.zwobble.couscous.ast.StaticMethodCallNode; -import org.zwobble.couscous.ast.TernaryConditionalNode; -import org.zwobble.couscous.ast.ThisReferenceNode; -import org.zwobble.couscous.ast.TypeName; import org.zwobble.couscous.values.BooleanValue; import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.ObjectValues; @@ -66,6 +20,7 @@ import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariabl import static org.zwobble.couscous.ast.MethodCallNode.methodCall; import static org.zwobble.couscous.ast.VariableDeclaration.var; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; +import static org.zwobble.couscous.ast.WhileNode.whileLoop; import static org.zwobble.couscous.util.ExtraLists.eagerMap; public class JavaReader { @@ -131,24 +86,26 @@ public class JavaReader { private static List<StatementNode> readStatement(Statement statement) { switch (statement.getNodeType()) { - case ASTNode.BLOCK: - return readBlock((Block)statement); - - case ASTNode.RETURN_STATEMENT: - return asList(readReturnStatement((ReturnStatement)statement)); - - case ASTNode.EXPRESSION_STATEMENT: - return asList(readExpressionStatement((ExpressionStatement)statement)); - - case ASTNode.IF_STATEMENT: - return asList(readIfStatement((IfStatement)statement)); - - case ASTNode.VARIABLE_DECLARATION_STATEMENT: - return readVariableDeclarationStatement((VariableDeclarationStatement)statement); - - default: - throw new RuntimeException("Unsupported statement: " + statement.getClass()); - + case ASTNode.BLOCK: + return readBlock((Block)statement); + + case ASTNode.RETURN_STATEMENT: + return asList(readReturnStatement((ReturnStatement)statement)); + + case ASTNode.EXPRESSION_STATEMENT: + return asList(readExpressionStatement((ExpressionStatement)statement)); + + case ASTNode.IF_STATEMENT: + return asList(readIfStatement((IfStatement)statement)); + + case ASTNode.WHILE_STATEMENT: + return asList(readWhileStatement((WhileStatement)statement)); + + case ASTNode.VARIABLE_DECLARATION_STATEMENT: + return readVariableDeclarationStatement((VariableDeclarationStatement)statement); + + default: + throw new RuntimeException("Unsupported statement: " + statement.getClass()); } } @@ -176,6 +133,12 @@ public class JavaReader { readStatement(statement.getElseStatement())); } + private static WhileNode readWhileStatement(WhileStatement statement) { + return whileLoop( + readExpression(BooleanValue.REF, statement.getExpression()), + readStatement(statement.getBody())); + } + private static List<StatementNode> readVariableDeclarationStatement(VariableDeclarationStatement statement) { @SuppressWarnings("unchecked") List<VariableDeclarationFragment> fragments = statement.fragments(); |
