From f71ae2c3c37a564bb9ced0e378ed08d805657fc2 Mon Sep 17 00:00:00 2001 From: Burkino <24849979+Burkino@users.noreply.github.com> Date: Mon, 15 Jul 2024 22:04:06 -0400 Subject: [PATCH 1/7] Minor changes to .g4 file, removes need for StatementStatement in ASTBuilder --- src/main/antlr/SFML.g4 | 18 ++-- .../java/ca/teamdman/sfml/ast/ASTBuilder.java | 92 +++++++------------ 2 files changed, 41 insertions(+), 69 deletions(-) diff --git a/src/main/antlr/SFML.g4 b/src/main/antlr/SFML.g4 index af741d452..984f570ed 100644 --- a/src/main/antlr/SFML.g4 +++ b/src/main/antlr/SFML.g4 @@ -25,18 +25,18 @@ interval: TICK #Tick // block : statement* ; -statement : inputstatement #InputStatementStatement - | outputstatement #OutputStatementStatement - | ifstatement #IfStatementStatement - | forgetstatement #ForgetStatementStatement +statement : inputStatement + | outputStatement + | ifStatement + | forgetStatement ; // IO STATEMENT -forgetstatement : FORGET label? (COMMA label)* COMMA?; -inputstatement : INPUT inputmatchers? resourceexclusion? FROM EACH? labelaccess +forgetStatement : FORGET label? (COMMA label)* COMMA?; +inputStatement : INPUT inputmatchers? resourceexclusion? FROM EACH? labelaccess | FROM EACH? labelaccess INPUT inputmatchers? resourceexclusion? ; -outputstatement : OUTPUT outputmatchers? resourceexclusion? TO EACH? labelaccess +outputStatement : OUTPUT outputmatchers? resourceexclusion? TO EACH? labelaccess | TO EACH? labelaccess OUTPUT outputmatchers? resourceexclusion? ; inputmatchers : movement; // separate for different defaults @@ -74,7 +74,7 @@ rangeset : range (COMMA range)*; range : number (DASH number)? ; -ifstatement : IF boolexpr THEN block (ELSE IF boolexpr THEN block)* (ELSE block)? END; +ifStatement : IF boolexpr THEN block (ELSE IF boolexpr THEN block)* (ELSE block)? END; boolexpr : TRUE #BooleanTrue | FALSE #BooleanFalse | LPAREN boolexpr RPAREN #BooleanParen @@ -204,7 +204,7 @@ DO : D O ; WORLD : W O R L D ; PROGRAM : P R O G R A M ; END : E N D ; -NAME : N A M E ; +NAME : N A M E; // GENERAL SYMBOLS // used by triggers and as a set operator diff --git a/src/main/java/ca/teamdman/sfml/ast/ASTBuilder.java b/src/main/java/ca/teamdman/sfml/ast/ASTBuilder.java index 677d0b05c..6f9710369 100644 --- a/src/main/java/ca/teamdman/sfml/ast/ASTBuilder.java +++ b/src/main/java/ca/teamdman/sfml/ast/ASTBuilder.java @@ -23,7 +23,7 @@ public List> getNodesUnderCursor(int cursorPos) .stream() .filter(pair -> pair.getSecond() != null) .filter(pair -> pair.getSecond().start.getStartIndex() <= cursorPos - && pair.getSecond().stop.getStopIndex() >= cursorPos) + && pair.getSecond().stop.getStopIndex() >= cursorPos) .collect(Collectors.toList()); } @@ -106,8 +106,8 @@ public Label visitRawLabel(SFMLParser.RawLabelContext ctx) { var label = new Label(ctx.getText()); if (label.name().length() > Program.MAX_LABEL_LENGTH) { throw new IllegalArgumentException("Label name cannot be longer than " - + Program.MAX_LABEL_LENGTH - + " characters."); + + Program.MAX_LABEL_LENGTH + + " characters."); } USED_LABELS.add(label); AST_NODE_CONTEXTS.add(new Pair<>(label, ctx)); @@ -119,8 +119,8 @@ public Label visitStringLabel(SFMLParser.StringLabelContext ctx) { var label = new Label(visitString(ctx.string()).value()); if (label.name().length() > Program.MAX_LABEL_LENGTH) { throw new IllegalArgumentException("Label name cannot be longer than " - + Program.MAX_LABEL_LENGTH - + " characters."); + + Program.MAX_LABEL_LENGTH + + " characters."); } USED_LABELS.add(label); AST_NODE_CONTEXTS.add(new Pair<>(label, ctx)); @@ -154,8 +154,8 @@ public ASTNode visitTimerTrigger(SFMLParser.TimerTriggerContext ctx) { // get default min interval int minInterval = timerTrigger.usesOnlyForgeEnergyResourceIO() - ? SFMConfig.getOrDefault(SFMConfig.COMMON.timerTriggerMinimumIntervalInTicksWhenOnlyForgeEnergyIO) - : SFMConfig.getOrDefault(SFMConfig.COMMON.timerTriggerMinimumIntervalInTicks); + ? SFMConfig.getOrDefault(SFMConfig.COMMON.timerTriggerMinimumIntervalInTicksWhenOnlyForgeEnergyIO) + : SFMConfig.getOrDefault(SFMConfig.COMMON.timerTriggerMinimumIntervalInTicks); // validate interval if (time.getTicks() < minInterval) { @@ -188,8 +188,8 @@ public ASTNode visitBooleanRedstone(SFMLParser.BooleanRedstoneContext ctx) { .getManager() .getLevel() .getBestNeighborSignal(programContext - .getManager() - .getBlockPos()), + .getManager() + .getBlockPos()), (long) finalNum ), ctx.getText() @@ -243,21 +243,7 @@ public Interval visitSeconds(SFMLParser.SecondsContext ctx) { } @Override - public InputStatement visitInputStatementStatement(SFMLParser.InputStatementStatementContext ctx) { - InputStatement input = (InputStatement) visit(ctx.inputstatement()); - AST_NODE_CONTEXTS.add(new Pair<>(input, ctx)); - return input; - } - - @Override - public OutputStatement visitOutputStatementStatement(SFMLParser.OutputStatementStatementContext ctx) { - OutputStatement output = (OutputStatement) visit(ctx.outputstatement()); - AST_NODE_CONTEXTS.add(new Pair<>(output, ctx)); - return output; - } - - @Override - public InputStatement visitInputstatement(SFMLParser.InputstatementContext ctx) { + public InputStatement visitInputStatement(SFMLParser.InputStatementContext ctx) { var labelAccess = visitLabelaccess(ctx.labelaccess()); var matchers = visitInputmatchers(ctx.inputmatchers()); var exclusions = visitResourceexclusion(ctx.resourceexclusion()); @@ -268,7 +254,7 @@ public InputStatement visitInputstatement(SFMLParser.InputstatementContext ctx) } @Override - public OutputStatement visitOutputstatement(SFMLParser.OutputstatementContext ctx) { + public OutputStatement visitOutputStatement(SFMLParser.OutputStatementContext ctx) { var labelAccess = visitLabelaccess(ctx.labelaccess()); var matchers = visitOutputmatchers(ctx.outputmatchers()); var exclusions = visitResourceexclusion(ctx.resourceexclusion()); @@ -301,12 +287,12 @@ public LabelAccess visitLabelaccess(SFMLParser.LabelaccessContext ctx) { public RoundRobin visitRoundrobin(@Nullable SFMLParser.RoundrobinContext ctx) { if (ctx == null) return RoundRobin.disabled(); return ctx.BLOCK() != null - ? new RoundRobin(RoundRobin.Behaviour.BY_BLOCK) - : new RoundRobin(RoundRobin.Behaviour.BY_LABEL); + ? new RoundRobin(RoundRobin.Behaviour.BY_BLOCK) + : new RoundRobin(RoundRobin.Behaviour.BY_LABEL); } @Override - public IfStatement visitIfstatement(SFMLParser.IfstatementContext ctx) { + public IfStatement visitIfStatement(SFMLParser.IfStatementContext ctx) { var conditions = ctx .boolexpr() .stream() @@ -348,13 +334,6 @@ public IfStatement visitIfstatement(SFMLParser.IfstatementContext ctx) { return nestedStatement; } - @Override - public IfStatement visitIfStatementStatement(SFMLParser.IfStatementStatementContext ctx) { - IfStatement ifStatement = visitIfstatement(ctx.ifstatement()); - AST_NODE_CONTEXTS.add(new Pair<>(ifStatement, ctx)); - return ifStatement; - } - @Override public BoolExpr visitBooleanTrue(SFMLParser.BooleanTrueContext ctx) { BoolExpr boolExpr = new BoolExpr(__ -> true, "TRUE"); @@ -462,11 +441,11 @@ public Limit visitQuantityRetentionLimit(SFMLParser.QuantityRetentionLimitContex public ResourceIdSet visitResourceexclusion(@Nullable SFMLParser.ResourceexclusionContext ctx) { if (ctx == null) return ResourceIdSet.EMPTY; ResourceIdSet resourceIdSet = new ResourceIdSet(ctx - .resourceid() - .stream() - .map(this::visit) - .map(ResourceIdentifier.class::cast) - .collect(HashSet::new, HashSet::add, HashSet::addAll)); + .resourceid() + .stream() + .map(this::visit) + .map(ResourceIdentifier.class::cast) + .collect(HashSet::new, HashSet::add, HashSet::addAll)); AST_NODE_CONTEXTS.add(new Pair<>(resourceIdSet, ctx)); return resourceIdSet; } @@ -539,14 +518,7 @@ public NumberRangeSet visitSlotqualifier(@Nullable SFMLParser.SlotqualifierConte } @Override - public ASTNode visitForgetStatementStatement(SFMLParser.ForgetStatementStatementContext ctx) { - ForgetStatement statement = (ForgetStatement) visit(ctx.forgetstatement()); - AST_NODE_CONTEXTS.add(new Pair<>(statement, ctx)); - return statement; - } - - @Override - public ForgetStatement visitForgetstatement(SFMLParser.ForgetstatementContext ctx) { + public ForgetStatement visitForgetStatement(SFMLParser.ForgetStatementContext ctx) { Set