LCOV - code coverage report
Current view: top level - builds/barbot/Cosmos/src/ModelGenerator/Eval - Eval-scanner.ll (source / functions) Hit Total Coverage
Test: coverage.info Lines: 21 36 58.3 %
Date: 2021-06-16 15:43:28 Functions: 4 4 100.0 %

          Line data    Source code
       1             : %{                                            /* -*- C++ -*- */
       2             : # include <cstdlib>
       3             : # include <errno.h>
       4             : # include <limits.h>
       5             : # include <string>
       6             : # include "Eval.hpp"
       7             : 
       8             : # undef yywrap
       9             : # define yywrap() 1
      10             : 
      11             : # define YY_DECL EVAL_DECL
      12             : 
      13             : /* By default evallex returns int, we use token_type.
      14             :    Unfortunately evalterminate by default returns 0, which is
      15             :    not of token_type.  */
      16             : #define yyterminate() return token::END
      17             : 
      18             : #ifndef __clang_analyzer__
      19             : %}
      20             : 
      21             : %option noyywrap nounput batch
      22             : 
      23             : STR [a-zA-Z][a-zA-Z_0-9]*
      24             : INT [0-9]+|[0-9]*
      25             : REAL ([0-9]+|[0-9]*\.[0-9]+)([eE][-+]?[0-9]+)? 
      26             : blank [ \t]
      27             : 
      28             : %{
      29             : # define EVAL_USER_ACTION  evallloc->columns (evalleng);
      30             : %}
      31             : %%
      32             : %{
      33        1070 :   evallloc->step ();
      34             : %}
      35          24 : {blank}+   evallloc->step ();
      36          24 : [\n]+      evallloc->lines (evalleng); evallloc->step ();
      37           0 : 
      38             : %{
      39             :   typedef eval::Eval_parser::token token;
      40             : %}
      41             :            /* Convert ints to the actual type of tokens.  */
      42           0 : [{}]     return eval::Eval_parser::token_type (evaltext[0]);
      43             : 
      44             : 
      45             : 
      46           0 : "(" {evallval->name = new std::string (evaltext); return token::LB;
      47             :             Evaluate.error (*evallloc, "( expected");}
      48           0 : ")" {evallval->name = new std::string (evaltext); return token::RB;
      49             :             Evaluate.error (*evallloc, ") expected");}
      50             : 
      51           0 : "," {evallval->name = new std::string (evaltext); return token::COMMA;
      52             :                    Evaluate.error (*evallloc, ", expected");}
      53             : 
      54           0 : "/" {evallval->name = new std::string (evaltext); return token::DIV;
      55             :             Evaluate.error (*evallloc, "/ expected");}
      56          12 : "*" {evallval->name = new std::string (evaltext); return token::MUL;
      57             :             Evaluate.error (*evallloc, "* expected");}
      58           0 : "+" {evallval->name = new std::string (evaltext); return token::PLUS;
      59             :             Evaluate.error (*evallloc, "+ expected");}
      60           0 : "-" {evallval->name = new std::string (evaltext); return token::MINUS;
      61             :             Evaluate.error (*evallloc, "- expected");}
      62           0 : "^" {evallval->name = new std::string (evaltext); return token::POWER;
      63             :             Evaluate.error (*evallloc, "^ expected");}
      64             : 
      65             :            
      66           0 : "min" {evallval->name = new std::string (evaltext); return token::MIN;
      67             :             Evaluate.error (*evallloc, "min expected");}
      68             : 
      69           0 : "max" {evallval->name = new std::string (evaltext); return token::MAX;
      70             :             Evaluate.error (*evallloc, "max expected");}
      71             : 
      72           0 : "floor" {evallval->name = new std::string (evaltext); return token::FLOOR;
      73             :             Evaluate.error (*evallloc, "floor expected");}
      74           0 : "double" {evallval->name = new std::string (evaltext); return token::DOUBLE;
      75             :             Evaluate.error (*evallloc, "double expected");}
      76             : 
      77             : 
      78             : {INT}      {
      79         458 :   errno = 0; 
      80         458 :   int x=atoi(evaltext);
      81         458 :   evallval->IntVal = x;
      82         458 :   return token::ival;
      83             : }
      84             :  
      85             : {REAL}      {
      86          72 :   errno = 0; 
      87          72 :   double x=atof(evaltext);
      88          72 :   evallval->RealVal = x;
      89          72 :   return token::rval;
      90             : }
      91             : 
      92          10 : {STR}       {evallval->name = new std::string (evaltext); return token::str;
      93             :             Evaluate.error (*evallloc, "invalid character");}
      94             : 
      95             : 
      96             : 
      97             : 
      98           0 : %%
      99           0 : 
     100             : 
     101             : 
     102             : 
     103             : void
     104             : Eval::scan_end ()
     105         528 : {  
     106             :   evallex_destroy();
     107         528 : }
     108         528 : 
     109             : 
     110             : void Eval::scan_expression (const std::string& f){
     111         528 :   const char* ch=f.c_str();
     112         528 : evalset_debug(trace_scanning);
     113         528 : 
     114             : // EVAL_BUFFER_STATE b=eval_scan_string(ch);
     115             : // eval_switch_to_buffer(b);
     116             :  eval_scan_string(ch);
     117         528 : }
     118         633 : #endif // not __clang_analyzer__
     119             : 
     120             : 

Generated by: LCOV version 1.13