From 830204a4fd1767ed09fcdbea9eced81d78399402 Mon Sep 17 00:00:00 2001 From: chris <christian.agodomou@etu.hesge.ch> Date: Wed, 23 Nov 2022 18:56:59 +0100 Subject: [PATCH] division --- ArbreAbstrait/Division.java | 26 +++++++++++++++++++++++ Tests/test_base_with_sementic_issue.input | 2 +- Visitors/ASTVisitor.java | 2 +- Visitors/ByteCodeGenerator.java | 2 +- Visitors/SemanticAnalyzer.java | 2 +- Visitors/SourceCodeGenerator.java | 12 +++++------ hepial.cup | 2 +- parser.java | 12 ++++++++--- sym.java | 2 +- 9 files changed, 47 insertions(+), 15 deletions(-) create mode 100755 ArbreAbstrait/Division.java diff --git a/ArbreAbstrait/Division.java b/ArbreAbstrait/Division.java new file mode 100755 index 0000000..cee264c --- /dev/null +++ b/ArbreAbstrait/Division.java @@ -0,0 +1,26 @@ +/* + * Represent an addition expression node inside the AST. + */ + +public class Division extends Arithmetique { + /** + * Constructor + */ + public Division(Expression operandeGauche, Expression operandeDroite, String fl, int line, int col) { + super(operandeGauche, operandeDroite, 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 675861e..93e1ccf 100755 --- a/Tests/test_base_with_sementic_issue.input +++ b/Tests/test_base_with_sementic_issue.input @@ -2,5 +2,5 @@ programme Program debutprg b = 3; - c = c - 2; + c = c / 2; finprg diff --git a/Visitors/ASTVisitor.java b/Visitors/ASTVisitor.java index d9fae68..5f0e066 100755 --- a/Visitors/ASTVisitor.java +++ b/Visitors/ASTVisitor.java @@ -19,7 +19,7 @@ public interface ASTVisitor { Object visit(DeclarationProgramme node); // Object visit(DeclarationVariable node); // Object visit(Diff node); -// Object visit(Division node); + Object visit(Division node); // Object visit(Ecrire node); Object visit(Egal node); // Object visit(Et node); diff --git a/Visitors/ByteCodeGenerator.java b/Visitors/ByteCodeGenerator.java index 37c1db8..d4fe13f 100755 --- a/Visitors/ByteCodeGenerator.java +++ b/Visitors/ByteCodeGenerator.java @@ -26,7 +26,7 @@ public class ByteCodeGenerator implements ASTVisitor{ // public Object visit(Diff node) { return null; } -// public Object visit(Division node) { return null; } + public Object visit(Division node) { return null; } // public Object visit(Ecrire node) { return null; } diff --git a/Visitors/SemanticAnalyzer.java b/Visitors/SemanticAnalyzer.java index 579a7e0..12e32f8 100755 --- a/Visitors/SemanticAnalyzer.java +++ b/Visitors/SemanticAnalyzer.java @@ -28,7 +28,7 @@ public class SemanticAnalyzer implements ASTVisitor { // public Object visit(Diff node) { return null; } -// public Object visit(Division node) { return null; } + public Object visit(Division node) { return null; } // public Object visit(Ecrire node) { return null; } diff --git a/Visitors/SourceCodeGenerator.java b/Visitors/SourceCodeGenerator.java index 96fb776..572222e 100755 --- a/Visitors/SourceCodeGenerator.java +++ b/Visitors/SourceCodeGenerator.java @@ -123,12 +123,12 @@ public class SourceCodeGenerator implements ASTVisitor{ // return null; // } // -// public Object visit(Division node){ -// node.getGauche().accept(this); -// code += " / "; -// node.getDroite().accept(this); -// return null; -// } + public Object visit(Division node){ + node.getGauche().accept(this); + code += " / "; + node.getDroite().accept(this); + return null; + } // // public Object visit(Ecrire node){ // code += "ecrire "; diff --git a/hepial.cup b/hepial.cup index bb16b12..74de5d3 100755 --- a/hepial.cup +++ b/hepial.cup @@ -78,7 +78,7 @@ declar_const ::= CONSTANT type IDENT EQUAL expr SEMICOLON {: :}; op_bin ::= expr:a PLUS expr:b {: RESULT = new Addition(a, b, "", aleft, aright); :} | expr:a MINUS expr:b {: RESULT = new Soustraction(a, b, "", aleft, aright); :} | expr TIMES expr {: :} - | expr DIVIDE expr {: :} + | expr:a DIVIDE expr:b {: RESULT = new Division(a, b, "", aleft, aright);:} | expr AND expr {: :} | expr OR expr {: :}; diff --git a/parser.java b/parser.java index cd55c68..62206d1 100644 --- a/parser.java +++ b/parser.java @@ -1,7 +1,7 @@ //---------------------------------------------------- // The following code was generated by CUP v0.11a beta 20060608 -// Wed Nov 23 18:32:15 CET 2022 +// Wed Nov 23 18:56:00 CET 2022 //---------------------------------------------------- import java_cup.runtime.*; @@ -10,7 +10,7 @@ import java.io.*; import java.util.*; /** CUP v0.11a beta 20060608 generated parser. - * @version Wed Nov 23 18:32:15 CET 2022 + * @version Wed Nov 23 18:56:00 CET 2022 */ public class parser extends java_cup.runtime.lr_parser { @@ -747,7 +747,13 @@ class CUP$parser$actions { case 17: // op_bin ::= expr DIVIDE expr { Binaire RESULT =null; - + int aleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; + int aright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; + Expression a = (Expression)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; + int bleft = ((java_cup.runtime.Symbol)CUP$parser$stack.peek()).left; + int bright = ((java_cup.runtime.Symbol)CUP$parser$stack.peek()).right; + Expression b = (Expression)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; + RESULT = new Division(a, b, "", aleft, aright); CUP$parser$result = parser.getSymbolFactory().newSymbol("op_bin",20, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)), ((java_cup.runtime.Symbol)CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; diff --git a/sym.java b/sym.java index 94a5a6e..9e2f5eb 100644 --- a/sym.java +++ b/sym.java @@ -1,7 +1,7 @@ //---------------------------------------------------- // The following code was generated by CUP v0.11a beta 20060608 -// Wed Nov 23 18:32:15 CET 2022 +// Wed Nov 23 18:56:00 CET 2022 //---------------------------------------------------- /** CUP generated class containing symbol constants. */ -- GitLab