Compare commits
No commits in common. "9edee7370544275fa4bfab63ba6a55baa24499f7" and "5bf9a4fc734192998429a146c3e8877e55d31894" have entirely different histories.
9edee73705
...
5bf9a4fc73
@ -2,7 +2,6 @@ package ast.block;
|
|||||||
|
|
||||||
import ast.ASTNode;
|
import ast.ASTNode;
|
||||||
import ast.statement.IStatementNode;
|
import ast.statement.IStatementNode;
|
||||||
import ast.statement.ReturnStatementNode;
|
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
import visitor.Visitable;
|
import visitor.Visitable;
|
||||||
@ -13,7 +12,6 @@ import java.util.List;
|
|||||||
|
|
||||||
public class BlockNode implements ASTNode, Visitable {
|
public class BlockNode implements ASTNode, Visitable {
|
||||||
public List<IStatementNode> statements = new ArrayList<>();
|
public List<IStatementNode> statements = new ArrayList<>();
|
||||||
public Boolean hasReturnStatement = false;
|
|
||||||
|
|
||||||
public BlockNode() {}
|
public BlockNode() {}
|
||||||
|
|
||||||
|
@ -6,12 +6,12 @@ import typechecker.TypeCheckResult;
|
|||||||
|
|
||||||
public class CalculationExpressionNode extends BinaryExpressionNode {
|
public class CalculationExpressionNode extends BinaryExpressionNode {
|
||||||
public CalculationExpressionNode calculationExpression;
|
public CalculationExpressionNode calculationExpression;
|
||||||
public EnumLineOperator operator;
|
public String operator;
|
||||||
public DotExpressionNode dotExpression;
|
public DotExpressionNode dotExpression;
|
||||||
|
|
||||||
public CalculationExpressionNode(CalculationExpressionNode calculationExpression, String operator, DotExpressionNode dotExpression) {
|
public CalculationExpressionNode(CalculationExpressionNode calculationExpression, String operator, DotExpressionNode dotExpression) {
|
||||||
this.calculationExpression = calculationExpression;
|
this.calculationExpression = calculationExpression;
|
||||||
setOperator(operator);
|
this.operator = operator;
|
||||||
this.dotExpression = dotExpression;
|
this.dotExpression = dotExpression;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,14 +19,6 @@ public class CalculationExpressionNode extends BinaryExpressionNode {
|
|||||||
this.dotExpression = dotExpression;
|
this.dotExpression = dotExpression;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setOperator(String operator) {
|
|
||||||
if(operator.equals("+")) {
|
|
||||||
this.operator = EnumLineOperator.PLUS;
|
|
||||||
} else if(operator.equals("-")) {
|
|
||||||
this.operator = EnumLineOperator.MINUS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TypeCheckResult accept(SemanticVisitor visitor) {
|
public TypeCheckResult accept(SemanticVisitor visitor) {
|
||||||
return visitor.analyze(this);
|
return visitor.analyze(this);
|
||||||
|
@ -6,12 +6,12 @@ import typechecker.TypeCheckResult;
|
|||||||
|
|
||||||
public class DotExpressionNode extends BinaryExpressionNode {
|
public class DotExpressionNode extends BinaryExpressionNode {
|
||||||
public DotExpressionNode dotExpression;
|
public DotExpressionNode dotExpression;
|
||||||
public EnumDotOperator operator;
|
public String operator;
|
||||||
public DotSubstractionExpressionNode dotSubstractionExpression;
|
public DotSubstractionExpressionNode dotSubstractionExpression;
|
||||||
|
|
||||||
public DotExpressionNode(DotExpressionNode dotExpression, String operator, DotSubstractionExpressionNode dotSubstractionExpression) {
|
public DotExpressionNode(DotExpressionNode dotExpression, String operator, DotSubstractionExpressionNode dotSubstractionExpression) {
|
||||||
this.dotExpression = dotExpression;
|
this.dotExpression = dotExpression;
|
||||||
setOperator(operator);
|
this.operator = operator;
|
||||||
this.dotSubstractionExpression = dotSubstractionExpression;
|
this.dotSubstractionExpression = dotSubstractionExpression;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,16 +19,6 @@ public class DotExpressionNode extends BinaryExpressionNode {
|
|||||||
this.dotSubstractionExpression = dotSubstractionExpression;
|
this.dotSubstractionExpression = dotSubstractionExpression;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setOperator(String operator) {
|
|
||||||
if(operator.equals("*")) {
|
|
||||||
this.operator = EnumDotOperator.MULT;
|
|
||||||
} else if(operator.equals("/")) {
|
|
||||||
this.operator = EnumDotOperator.DIV;
|
|
||||||
} else if(operator.equals("%")) {
|
|
||||||
this.operator = EnumDotOperator.MOD;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TypeCheckResult accept(SemanticVisitor visitor) {
|
public TypeCheckResult accept(SemanticVisitor visitor) {
|
||||||
return visitor.analyze(this);
|
return visitor.analyze(this);
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
package ast.expression.binaryexpression;
|
|
||||||
|
|
||||||
public enum EnumDotOperator {
|
|
||||||
MULT, DIV, MOD
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
package ast.expression.binaryexpression;
|
|
||||||
|
|
||||||
public enum EnumLineOperator {
|
|
||||||
PLUS, MINUS
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
package ast.expression.binaryexpression;
|
|
||||||
|
|
||||||
public enum EnumNonCalculationOperator {
|
|
||||||
AND, OR, GREATER, LESS, GREATER_EQUAL, LESS_EQUAL, EQUAL, NOT_EQUAL
|
|
||||||
}
|
|
@ -8,35 +8,15 @@ import typechecker.TypeCheckResult;
|
|||||||
|
|
||||||
public class NonCalculationExpressionNode extends BinaryExpressionNode {
|
public class NonCalculationExpressionNode extends BinaryExpressionNode {
|
||||||
public UnaryExpressionNode unaryExpression;
|
public UnaryExpressionNode unaryExpression;
|
||||||
public EnumNonCalculationOperator operator;
|
public String operator;
|
||||||
public IExpressionNode expression;
|
public IExpressionNode expression;
|
||||||
|
|
||||||
public NonCalculationExpressionNode(UnaryExpressionNode unaryExpression, String operator, IExpressionNode expression) {
|
public NonCalculationExpressionNode(UnaryExpressionNode unaryExpression, String operator, IExpressionNode expression) {
|
||||||
this.unaryExpression = unaryExpression;
|
this.unaryExpression = unaryExpression;
|
||||||
setOperator(operator);
|
this.operator = operator;
|
||||||
this.expression = expression;
|
this.expression = expression;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setOperator(String operator) {
|
|
||||||
if(operator.equals("&&")) {
|
|
||||||
this.operator = EnumNonCalculationOperator.AND;
|
|
||||||
} else if(operator.equals("||")) {
|
|
||||||
this.operator = EnumNonCalculationOperator.OR;
|
|
||||||
} else if(operator.equals(">")) {
|
|
||||||
this.operator = EnumNonCalculationOperator.GREATER;
|
|
||||||
} else if(operator.equals("<")) {
|
|
||||||
this.operator = EnumNonCalculationOperator.LESS;
|
|
||||||
} else if(operator.equals(">=")) {
|
|
||||||
this.operator = EnumNonCalculationOperator.GREATER_EQUAL;
|
|
||||||
} else if(operator.equals("<=")) {
|
|
||||||
this.operator = EnumNonCalculationOperator.LESS_EQUAL;
|
|
||||||
} else if(operator.equals("==")) {
|
|
||||||
this.operator = EnumNonCalculationOperator.EQUAL;
|
|
||||||
} else if(operator.equals("!=")) {
|
|
||||||
this.operator = EnumNonCalculationOperator.NOT_EQUAL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TypeCheckResult accept(SemanticVisitor visitor) {
|
public TypeCheckResult accept(SemanticVisitor visitor) {
|
||||||
return visitor.analyze(this);
|
return visitor.analyze(this);
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
package ast.member;
|
|
||||||
|
|
||||||
import ast.block.BlockNode;
|
|
||||||
|
|
||||||
public class MainMethodNode extends MethodNode {
|
|
||||||
public BlockNode block;
|
|
||||||
|
|
||||||
public MainMethodNode(BlockNode block) {
|
|
||||||
this.block = block;
|
|
||||||
}
|
|
||||||
}
|
|
@ -23,6 +23,10 @@ public class MethodNode implements MemberNode, Visitable {
|
|||||||
|
|
||||||
public MethodNode() {}
|
public MethodNode() {}
|
||||||
|
|
||||||
|
public MethodNode(BlockNode block){
|
||||||
|
this.block = block;
|
||||||
|
}
|
||||||
|
|
||||||
public MethodNode(String accessModifier, ITypeNode type, Boolean voidType, String identifier, BlockNode block){
|
public MethodNode(String accessModifier, ITypeNode type, Boolean voidType, String identifier, BlockNode block){
|
||||||
this.accesModifier = new AccessModifierNode(accessModifier);
|
this.accesModifier = new AccessModifierNode(accessModifier);
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
@ -1,19 +1,15 @@
|
|||||||
package ast.statement;
|
package ast.statement;
|
||||||
|
|
||||||
|
import ast.ASTNode;
|
||||||
import ast.expression.IExpressionNode;
|
import ast.expression.IExpressionNode;
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
|
|
||||||
public class ReturnStatementNode implements IStatementNode {
|
public class ReturnStatementNode implements IStatementNode {
|
||||||
public IExpressionNode expression;
|
public IExpressionNode expression;
|
||||||
public Boolean voidReturn = false;
|
|
||||||
|
|
||||||
public ReturnStatementNode(IExpressionNode expression) {
|
public ReturnStatementNode(IExpressionNode expression) {
|
||||||
if(expression != null) {
|
this.expression = expression;
|
||||||
this.expression = expression;
|
|
||||||
} else {
|
|
||||||
voidReturn = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
5
src/main/java/ast/type/EnumTypeNode.java
Normal file
5
src/main/java/ast/type/EnumTypeNode.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package ast.type;
|
||||||
|
|
||||||
|
public enum EnumTypeNode {
|
||||||
|
INT, BOOLEAN, CHAR, IDENTIFIER
|
||||||
|
}
|
@ -10,9 +10,12 @@ import ast.expression.binaryexpression.NonCalculationExpressionNode;
|
|||||||
import ast.expression.unaryexpression.MemberAccessNode;
|
import ast.expression.unaryexpression.MemberAccessNode;
|
||||||
import ast.expression.unaryexpression.NotExpressionNode;
|
import ast.expression.unaryexpression.NotExpressionNode;
|
||||||
import ast.expression.unaryexpression.UnaryExpressionNode;
|
import ast.expression.unaryexpression.UnaryExpressionNode;
|
||||||
import ast.member.*;
|
import ast.member.FieldNode;
|
||||||
|
import ast.member.MethodNode;
|
||||||
import ast.statement.ifstatement.ElseStatementNode;
|
import ast.statement.ifstatement.ElseStatementNode;
|
||||||
import ast.statement.ifstatement.IfElseStatementNode;
|
import ast.statement.ifstatement.IfElseStatementNode;
|
||||||
|
import ast.member.ConstructorNode;
|
||||||
|
import ast.member.MemberNode;
|
||||||
import ast.parameter.ParameterNode;
|
import ast.parameter.ParameterNode;
|
||||||
import ast.statement.*;
|
import ast.statement.*;
|
||||||
import ast.statement.ifstatement.IfStatementNode;
|
import ast.statement.ifstatement.IfStatementNode;
|
||||||
@ -62,7 +65,7 @@ public class ASTBuilder extends SimpleJavaBaseVisitor<ASTNode> {
|
|||||||
@Override
|
@Override
|
||||||
public ASTNode visitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx) {
|
public ASTNode visitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx) {
|
||||||
if(ctx.MainMethodDeclaration() != null) {
|
if(ctx.MainMethodDeclaration() != null) {
|
||||||
return new MainMethodNode((BlockNode) visit(ctx.block()));
|
return new MethodNode((BlockNode) visit(ctx.block()));
|
||||||
} else {
|
} else {
|
||||||
if(ctx.type() != null) {
|
if(ctx.type() != null) {
|
||||||
MethodNode methodNode = new MethodNode(ctx.AccessModifier().getText(), createTypeNode(ctx.type().getText()), false, ctx.Identifier().getText(), (BlockNode) visit(ctx.block()));
|
MethodNode methodNode = new MethodNode(ctx.AccessModifier().getText(), createTypeNode(ctx.type().getText()), false, ctx.Identifier().getText(), (BlockNode) visit(ctx.block()));
|
||||||
@ -126,9 +129,6 @@ public class ASTBuilder extends SimpleJavaBaseVisitor<ASTNode> {
|
|||||||
for(SimpleJavaParser.StatementContext statement : ctx.statement()) {
|
for(SimpleJavaParser.StatementContext statement : ctx.statement()) {
|
||||||
blockNode.addStatement((IStatementNode) visit(statement));
|
blockNode.addStatement((IStatementNode) visit(statement));
|
||||||
}
|
}
|
||||||
if(!blockNode.hasReturnStatement) {
|
|
||||||
blockNode.addStatement(new ReturnStatementNode(null));
|
|
||||||
}
|
|
||||||
return blockNode;
|
return blockNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user