From fc93907d514a20a8af10fd5a9b85cf558f8fa65e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Fri, 10 Aug 2018 09:41:14 +0200 Subject: [PATCH] [poincare] Add YYSTYPE declaration in the lexer --- poincare/Makefile | 3 +++ poincare/src/expression.cpp | 4 ++-- poincare/src/expression_lexer.l | 13 +++++++++++++ poincare/src/expression_parser.y | 24 ++++++++++++++++-------- 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/poincare/Makefile b/poincare/Makefile index c2b109462..66176533f 100644 --- a/poincare/Makefile +++ b/poincare/Makefile @@ -5,6 +5,9 @@ SFLAGS += -Ipoincare/include objs += $(addprefix poincare/src/,\ addition.o\ arithmetic.o\ + expression_lexer.o\ + expression_parser.o\ + layout_helper.o\ matrix_complex.o\ multiplication.o\ power.o\ diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index aad41b873..4cb5bab9c 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -10,8 +10,8 @@ #include #include #include -//#include "expression_parser.hpp" -//#include "expression_lexer.hpp" +#include "expression_parser.hpp" +#include "expression_lexer.hpp" int poincare_expression_yyparse(Poincare::Expression * expressionOutput); diff --git a/poincare/src/expression_lexer.l b/poincare/src/expression_lexer.l index 890f18264..fd1ea2dcd 100644 --- a/poincare/src/expression_lexer.l +++ b/poincare/src/expression_lexer.l @@ -40,6 +40,19 @@ * requires feature. */ #include #include + +struct OurNodeValue{ + Poincare::Expression expression; + Poincare::Symbol symbol; + struct { + char * address; + int length; + } string; + char character; +}; +#define YYSTYPE OurNodeValue + + #include "expression_parser.hpp" using namespace Poincare; diff --git a/poincare/src/expression_parser.y b/poincare/src/expression_parser.y index 185e61094..c29aee3de 100644 --- a/poincare/src/expression_parser.y +++ b/poincare/src/expression_parser.y @@ -8,15 +8,23 @@ %{ #include -struct YYSTYPE { - Poincare::Expression expression; - Poincare::Symbol symbol; - struct { - char * address; - int length; - } string; - char character; +/* TODO Comment + Usually, YYSTYPE is defined as the union of the objects it might be. Here, these objects are non-trivial, as some have comple constructors and destructors + struct et pas union car constructeurs/compliqués donc si union on ne sait pas comment appeler + on a besoin de mettre la meme chose dans le lexer car on arrive pas à mettre la struc dans expression_parser.hpp qui est inclus dans expression_lexer normalement pour ça + + +*/ +struct OurNodeValue{ + Poincare::Expression expression; + Poincare::Symbol symbol; + struct { + char * address; + int length; + } string; + char character; }; +#define YYSTYPE OurNodeValue /* The lexer manipulates tokens defined by the parser, so we need the following