From fd7f7c39bb68e3a79a4b36fca623770412aebe94 Mon Sep 17 00:00:00 2001 From: nitrix Date: Tue, 4 Feb 2020 19:17:13 +0100 Subject: [PATCH] implement a visitor that collects the names of all structs that were defined --- .../de/hsrm/compiler/Klang/GetStructs.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/main/java/de/hsrm/compiler/Klang/GetStructs.java diff --git a/src/main/java/de/hsrm/compiler/Klang/GetStructs.java b/src/main/java/de/hsrm/compiler/Klang/GetStructs.java new file mode 100644 index 0000000..b18c497 --- /dev/null +++ b/src/main/java/de/hsrm/compiler/Klang/GetStructs.java @@ -0,0 +1,38 @@ +package de.hsrm.compiler.Klang; + +import java.util.Set; + +import de.hsrm.compiler.Klang.helper.Helper; + +public class GetStructs extends KlangBaseVisitor { + + private Set structs; + + public GetStructs(Set structs) { + this.structs = structs; + } + + @Override + public Void visitProgram(KlangParser.ProgramContext ctx) { + for (int i = 0; i < ctx.structDef().size(); i++) { + this.visit(ctx.structDef(i)); + } + + return null; + } + + @Override + public Void visitStructDef(KlangParser.StructDefContext ctx) { + String name = ctx.structName.getText(); + int line = ctx.start.getLine(); + int col = ctx.start.getCharPositionInLine(); + + if (this.structs.contains(name)) { + String error = "Struct " + name + " defined multiple times."; + throw new Error(Helper.getErrorPrefix(line, col) + error); + } + + this.structs.add(name); + return null; + } +} \ No newline at end of file