This commit is contained in:
parent
de5c2a5002
commit
8a5f307947
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@ -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>
|
@ -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;
|
||||
}
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
@ -230,22 +230,22 @@ 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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,10 @@ public class Example {
|
||||
|
||||
public static int testMethod(char x){
|
||||
|
||||
a = 12;
|
||||
|
||||
a = x;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user