From 2a901e4a37ebb466150c4d8d0ac1c9426af4b767 Mon Sep 17 00:00:00 2001 From: Vu Tuan Minh Date: Tue, 1 Apr 2025 17:29:09 +0200 Subject: [PATCH] error 28 --- .gitignore | 4 ++- src/main/antlr/VSLLexer.g | 2 +- src/main/antlr/VSLParser.g | 53 +++++++++++++++--------------- src/main/java/TP2/Main.java | 3 +- src/main/java/TP2/asd/Program.java | 4 +-- 5 files changed, 33 insertions(+), 33 deletions(-) diff --git a/.gitignore b/.gitignore index c8a545d..115ad30 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,6 @@ build bin *.ll *.DS_Store -**/.antlr/ \ No newline at end of file +*/.antlr/VSLLexer.java +*.interp +*/.antlr/VSLParser.java \ No newline at end of file diff --git a/src/main/antlr/VSLLexer.g b/src/main/antlr/VSLLexer.g index b279cba..4809462 100644 --- a/src/main/antlr/VSLLexer.g +++ b/src/main/antlr/VSLLexer.g @@ -44,7 +44,7 @@ PRINT : 'PRINT' ; RETURN: 'RETURN' ; -TEXT : '"' (ASCII)+ '"' {getText().substring(1,getText().length()-1)} +TEXT : '"' (ASCII)+ '"' {getText().substring(1,getText().length()-1);} ; NUMBER : (DIGIT)+ ; diff --git a/src/main/antlr/VSLParser.g b/src/main/antlr/VSLParser.g index d3fed92..d76f11d 100644 --- a/src/main/antlr/VSLParser.g +++ b/src/main/antlr/VSLParser.g @@ -8,9 +8,7 @@ options { @header { package TP2; - - import TP2.Program.Program; - import TP2.SymTable.SymTable; + import TP2.asd.*; } // On syntax error, raise exception rather than silently recovery @@ -21,41 +19,42 @@ options { } } -program returns [Program.Program p] : +program returns [Program p] : func=function EOF - {$p = new Program.Program($func.out);} + {$p = new Program($func.out);} ; -function returns [List out] +function returns [List out] @init{ - SymTable.SymTable sym_table = new SymTable.SymTable(); + SymTable sym_table = new SymTable(); }: FUNCTION t=type i=ident ParO ParF instrs=list_instr[sym_table] { - $out.add(new Program.Function($t.return_type, $i.out, $instrs.out)); + $out.add(new Function($t.return_type, $i.out, $instrs.out)); } ; -prototype returns [Program.Program p]: +prototype returns [Program p]: ; -list_instr [SymTable.SymTable table] returns [List out] +list_instr [SymTable table] returns [ArrayList out] @init{ - List instructions = new List(); + $out = new ArrayList<>(); }: - instruction [table]{ - instructions.add($instruction.out); - $out=instructions; + instruction [table] { + $out.addAll($instruction.out); } ; -instruction [SymTable.SymTable table] returns [List out]: - RETURN expression[SymTable table] +instruction [SymTable table] returns [ArrayList out]: + RETURN e=expression [table] + {$out = new ArrayList<>(); + $out.add(new Return_instr($e.out));} ; -expression [SymTable.SymTable table] returns [Type return_Type, Expression out]: +expression [SymTable table] returns [Type return_Type, Expression out]: //Fix LL1 and compare add and sub first left=td_expression[table] { $out = $left.out; @@ -64,10 +63,10 @@ expression [SymTable.SymTable table] returns [Type return_Type, Expression out]: //maybe it will be binop(s) with add/sub here //if it is mul or div, they are all gonna be left=td_expression[table] to handle (op=(PLUS | MINUS) right=td_expression[table] { - $out = new Program.BinopExpression( + $out = new BinopExpression( switch($op.getType()) { - case PLUS -> Op.PLUS; - case MINUS -> Op.MINUS; + case PLUS -> PLUS; + case MINUS -> MINUS; default -> throw new IllegalArgumentException("Unknown operator"); }, $left.out, @@ -77,7 +76,7 @@ expression [SymTable.SymTable table] returns [Type return_Type, Expression out]: })* ; -td_expression [SymTable.SymTable table] returns [Type return_Type, Expression out]: +td_expression [SymTable table] returns [Type return_Type, Expression out]: left=lit { $out = $left.out; $return_Type = $left.return_Type; @@ -85,8 +84,8 @@ td_expression [SymTable.SymTable table] returns [Type return_Type, Expression ou (op=(TIMES | DIV) right=lit { $out = new Program.BinopExpression( switch($op.getType()) { - case TIMES -> Op.TIMES; - case DIV -> Op.DIV; + case TIMES -> TIMES; + case DIV -> DIV; default -> throw new IllegalArgumentException("Unknown operator"); }, $left.out, @@ -98,8 +97,8 @@ td_expression [SymTable.SymTable table] returns [Type return_Type, Expression ou lit returns [Expression out, Type return_Type]: NUMBER { - $return_Type = new Program.Type_int(); - $out = new Program.Const($NUMBER.int); + $return_Type = new Type_int(); + $out = new Const($NUMBER.int); } ; @@ -108,6 +107,6 @@ ident returns [String out]: ; type returns [Type return_type]: - TYPE_INT { $return_type = new Program.Type.Type_int(); } - |TYPE_VOID { $return_type = new Program.Type.Type_void(); } + TYPE_INT { $return_type = new Type_int(); } + |TYPE_VOID { $return_type = new Type_void(); } ; \ No newline at end of file diff --git a/src/main/java/TP2/Main.java b/src/main/java/TP2/Main.java index f11dd26..ca8eee9 100644 --- a/src/main/java/TP2/Main.java +++ b/src/main/java/TP2/Main.java @@ -8,7 +8,8 @@ import org.antlr.runtime.CharStream; import org.antlr.runtime.CommonTokenStream; import org.antlr.runtime.RecognitionException; -import TP2.asd.Program; +import TP2.asd.*; +import java.util.*; public class Main { public static void main(String[] args) { diff --git a/src/main/java/TP2/asd/Program.java b/src/main/java/TP2/asd/Program.java index c84a301..409203e 100644 --- a/src/main/java/TP2/asd/Program.java +++ b/src/main/java/TP2/asd/Program.java @@ -1,9 +1,7 @@ package TP2.asd; import java.util.ArrayList; -import java.util.Map; -import java.util.Stack; -import java.util.stream.Collectors; + public record Program(ArrayList functions) {