code-generator #13

Merged
i22005 merged 29 commits from code-generator into main 2024-07-01 21:14:37 +00:00
7 changed files with 19 additions and 17 deletions
Showing only changes of commit 09e36a84dc - Show all commits

2
.idea/misc.xml generated
View File

@ -40,7 +40,7 @@
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="openjdk-22" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_22" default="true" project-jdk-name="openjdk-22" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

View File

@ -1,24 +1,25 @@
package ast.literal;
import ast.expression.ExpressionNode;
import ast.type.TypeNode;
import semantic.SemanticVisitor;
import typechecker.TypeCheckResult;
public class LiteralNode implements ExpressionNode {
public String value;
private String type;
private TypeNode type;
public LiteralNode(String value, String type) {
public LiteralNode(String value, TypeNode type) {
this.value = value;
this.type = type;
}
public String getType() {
public TypeNode getType() {
return type;
}
public void setType(String type) {
public void setType(TypeNode type) {
this.type = type;
}

View File

@ -230,33 +230,33 @@ public class ASTBuilder extends SimpleJavaBaseVisitor<ASTNode> {
@Override
public ASTNode visitLiteral(SimpleJavaParser.LiteralContext ctx) {
String type;
TypeNode type;
String value;
if(ctx.INTEGERLITERAL() != null) {
type = "int";
type = new BaseTypeNode(EnumTypeNode.INT);
value = ctx.INTEGERLITERAL().getText();
return new LiteralNode(type, value);
return new LiteralNode(value, type);
} else if(ctx.booleanLiteral() != null) {
type= "boolean";
type= new BaseTypeNode(EnumTypeNode.BOOLEAN);
BooleanLiteralNode booleanNode = (BooleanLiteralNode) visitBooleanLiteral(ctx.booleanLiteral());
value = booleanNode.getValue();
return new LiteralNode(type, value);
return new LiteralNode(value, type);
} else if(ctx.charLiteral() != null) {
type= "char";
type= new BaseTypeNode(EnumTypeNode.CHAR);
CharLiteralNode charNode = (CharLiteralNode) visitCharLiteral(ctx.charLiteral());
value = charNode.getValue();
return new LiteralNode(type, value);
return new LiteralNode(value, type);
}
return null;
}
@Override
public ASTNode visitBooleanLiteral(SimpleJavaParser.BooleanLiteralContext ctx) {
return super.visitBooleanLiteral(ctx);
return (ASTNode) new BooleanLiteralNode(ctx.getText());
}
@Override
public ASTNode visitCharLiteral(SimpleJavaParser.CharLiteralContext ctx) {
return super.visitCharLiteral(ctx);
return (ASTNode) new CharLiteralNode(ctx.getText());
}
}

View File

@ -146,9 +146,6 @@ public class SemanticAnalyzer implements SemanticVisitor {
@Override
public TypeCheckResult analyze(AssignmentStatementNode assignmentStatementNode) {
boolean valid = true;
BinaryExpressionNode binaryExpressionNode = assignmentStatementNode.expression;
var result = binaryExpressionNode.accept(this);
valid = valid && result.isValid();
return new TypeCheckResult(valid, null);
}

View File

@ -4,6 +4,10 @@ public class Example {
public static int testMethod(char x){
a = 12;
a = x;
}
}