LCOV - code coverage report
Current view: top level - builds/barbot/Cosmos/src/ModelGenerator/Eval - Eval-parser.yy (source / functions) Hit Total Coverage
Test: coverage.info Lines: 8 22 36.4 %
Date: 2021-06-16 15:43:28 Functions: 3 3 100.0 %

          Line data    Source code
       1             : %skeleton "lalr1.cc"                          /*  -*- C++ -*- */
       2             : %require "2.4"
       3             : %defines
       4             : %define parser_class_name {Eval_parser}
       5             : 
       6             : %code requires {
       7             : #include <math.h>
       8             : #include <limits.h>
       9             : # include <string>
      10             : 
      11             : #include <fstream>
      12             : #include <sstream>
      13             : #include <set>
      14             : class Eval;
      15             : 
      16             : using namespace std;
      17             : 
      18             : }
      19             : 
      20             : // The parsing context.
      21             : %parse-param { Eval& Evaluate }
      22             : %lex-param   { Eval& Evaluate }
      23             : 
      24             : %locations
      25             : 
      26             : %debug
      27             : %error-verbose
      28             : 
      29             : // Symbols.
      30             : %union
      31             : {
      32             :   double       RealVal;
      33             :   int          IntVal;
      34             :   std::string *name;
      35             : 
      36             : };
      37             : 
      38             : %code {
      39             : #include "Eval.hpp"
      40             : #include <set>
      41             : #include <vector>
      42             : 
      43             : }
      44             : 
      45             : %token        END      0 "end of file"
      46             : 
      47             : %token <name>    str
      48             : %token <RealVal>  rval
      49             : %token <IntVal>  ival
      50             : 
      51             : %token <name>     MIN
      52             : %token <name>     MAX
      53             : %token <name>     FLOOR
      54             : %token <name>     PLUS
      55             : %token <name>     MINUS
      56             : %token <name>     MUL
      57             : %token <name>     DIV
      58             : %token <name>     POWER
      59             : %token <name>     LB
      60             : %token <name>     RB
      61             : %token <name>     COMMA
      62             : %token <name>     DOUBLE
      63             : 
      64             : %type<RealVal>    exp
      65             : 
      66             : 
      67             : 
      68           0 : %printer    { debug_stream () << *$$; } str
      69          10 : %destructor { delete $$; } str
      70             : 
      71           0 : %printer    { debug_stream () << $$; } <IntVal>
      72           0 : %printer    { debug_stream () << $$; } <RealVal>
      73             : 
      74             : %%
      75             : 
      76             : %left PLUS MINUS;
      77             : %left NEG;
      78             : %left MUL  DIV;
      79             : %left POWER;
      80             : %left DOUBLE;
      81             : %start ArithmethicExp;
      82         518 : ArithmethicExp:exp {Evaluate.IntResult=(int) $1;Evaluate.RealResult=$1;};
      83             : exp:
      84         458 :         ival {$$=$1;}
      85          72 :         |rval {$$=$1;}
      86           0 :         |LB exp RB {$$=$2;}
      87           0 :         |MINUS exp %prec NEG {$$=-$2;}
      88           0 :         |exp PLUS exp{$$=$1+$3;}
      89           2 :         |exp MUL exp{$$=$1*$3;}
      90           0 :         |exp MINUS exp{$$=$1-$3;}
      91           0 :         |DOUBLE exp {$$=double($2);}
      92           0 :         |exp DIV exp    {if($3==0)        {cout<<"Division by zero !";YYABORT;}
      93           0 :                                          else $$=$1/double $3;
      94             :                                         }
      95           0 :         |exp POWER exp {$$=pow($1,$3);}
      96           0 :         |MIN   LB exp COMMA exp RB      {if($3<=$5) $$=$3; else $$=$5;}
      97           0 :         |MAX   LB exp COMMA exp RB      {if($3>=$5) $$=$3;       else $$=$5;}
      98           0 :         |FLOOR LB exp  RB                       {$$=floor($3);}
      99             : 
     100             : %%
     101             : 
     102             : void
     103          10 : eval::Eval_parser::error (const eval::Eval_parser::location_type& l,
     104             :                           const std::string& m)
     105             : {
     106          10 :  Evaluate.error (l, m);
     107         115 : }

Generated by: LCOV version 1.13