From d947971e644364a64c107f8b3eb5bf45592fff09 Mon Sep 17 00:00:00 2001
From: "lucien.noel" <lucien.noel@etu.hesge.ch>
Date: Wed, 7 Dec 2022 19:04:35 +0100
Subject: [PATCH] =?UTF-8?q?class=20Moins=20cr=C3=A9=C3=A9e?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ArbreAbstrait/Moins.java                  | 19 +++++++++++++++++++
 Tests/test_base_with_sementic_issue.input |  6 +-----
 Visitors/ASTVisitor.java                  |  2 +-
 Visitors/ByteCodeGenerator.java           |  2 +-
 Visitors/SemanticAnalyzer.java            |  2 +-
 Visitors/SourceCodeGenerator.java         | 10 +++++-----
 hepial.cup                                |  2 +-
 7 files changed, 29 insertions(+), 14 deletions(-)
 create mode 100644 ArbreAbstrait/Moins.java

diff --git a/ArbreAbstrait/Moins.java b/ArbreAbstrait/Moins.java
new file mode 100644
index 0000000..b3dd32a
--- /dev/null
+++ b/ArbreAbstrait/Moins.java
@@ -0,0 +1,19 @@
+public class Moins extends Unaire{
+    public Moins(Expression operande, String fl, int line, int col) {
+        super(operande, fl, line, col);
+    }
+
+    /**
+     * Get the binary operator
+     */
+    public String operateur() {
+        return "-";
+    }
+
+    /**
+     * Accepts a AST visitor
+     */
+    Object accept(ASTVisitor visitor){
+        return visitor.visit(this);
+    }
+}
diff --git a/Tests/test_base_with_sementic_issue.input b/Tests/test_base_with_sementic_issue.input
index f42a339..126236c 100755
--- a/Tests/test_base_with_sementic_issue.input
+++ b/Tests/test_base_with_sementic_issue.input
@@ -1,8 +1,4 @@
 programme Program
 debutprg
-    c = c * 2;
-    b = 3;
-    d = c <> b;
-
-    lire "oui";
+    c = -2;
 finprg
diff --git a/Visitors/ASTVisitor.java b/Visitors/ASTVisitor.java
index 1c1af6a..1acb575 100755
--- a/Visitors/ASTVisitor.java
+++ b/Visitors/ASTVisitor.java
@@ -37,7 +37,7 @@ public interface ASTVisitor {
     Object visit(InfEgal node);
     Object visit(Inferieur node);
     Object visit(Lire node);
-    // Object visit(Moins node);
+    Object visit(Moins node);
     Object visit(Nombre node);
 
     Object visit(Non node);
diff --git a/Visitors/ByteCodeGenerator.java b/Visitors/ByteCodeGenerator.java
index d3dd815..4f0b76b 100755
--- a/Visitors/ByteCodeGenerator.java
+++ b/Visitors/ByteCodeGenerator.java
@@ -62,7 +62,7 @@ public class ByteCodeGenerator implements ASTVisitor {
 
     public Object visit(Lire node) { return null; }
 
-    // public Object visit(Moins node) { return null; }
+    public Object visit(Moins node) { return null; }
 
     public Object visit(Nombre node) {
         return null;
diff --git a/Visitors/SemanticAnalyzer.java b/Visitors/SemanticAnalyzer.java
index fd5a3cf..e659598 100755
--- a/Visitors/SemanticAnalyzer.java
+++ b/Visitors/SemanticAnalyzer.java
@@ -64,7 +64,7 @@ public class SemanticAnalyzer implements ASTVisitor {
 
     public Object visit(Lire node) { return null; }
 
-    // public Object visit(Moins node) { return null; }
+    public Object visit(Moins node) { return null; }
 
     public Object visit(Nombre node) {
         return null;
diff --git a/Visitors/SourceCodeGenerator.java b/Visitors/SourceCodeGenerator.java
index d825a48..52aa723 100755
--- a/Visitors/SourceCodeGenerator.java
+++ b/Visitors/SourceCodeGenerator.java
@@ -184,11 +184,11 @@ public class SourceCodeGenerator implements ASTVisitor {
     return null;
     }
     
-    // public Object visit(Moins node){
-    // code += "-";
-    // node.getOperand().accept(this);
-    // return null;
-    // }
+    public Object visit(Moins node){
+    code += node.operateur();
+    node.getOperand().accept(this);
+    return null;
+    }
 
     public Object visit(Nombre node) {
         code += Integer.toString(node.getValeur());
diff --git a/hepial.cup b/hepial.cup
index 079c230..596467f 100755
--- a/hepial.cup
+++ b/hepial.cup
@@ -90,7 +90,7 @@ relation          ::= expr:a EQUALS expr:b  {: RESULT = new Egal(a, b, "", aleft
                       | expr:a SUPEQUAL expr:b  {: RESULT = new SupEgal(a, b, "", aleft, aright); :};
 
 op_una             ::= NOT expr:a       {: RESULT = new Non(a, "", aleft, aright); :}
-                      | MINUS expr    {: :}
+                      | MINUS expr:a    {: RESULT = new Moins(a, "", aleft, aright);:}
                       %prec UMINUS;
 
 operand           ::= access:access       {: RESULT = access; :}
-- 
GitLab