clean up number scanner in Units
This commit is contained in:
parent
1da5543657
commit
b32b227733
|
@ -239,7 +239,28 @@ Quantity Quantity::Gon (360.0/400.0 ,Unit(0,0,0,0,0,0,0,1)); // g
|
||||||
|
|
||||||
Quantity QuantResult;
|
Quantity QuantResult;
|
||||||
|
|
||||||
|
/* helper function for tuning number strings with groups in a locale agnostic way... */
|
||||||
|
double num_change(char* yytext,char dez_delim,char grp_delim)
|
||||||
|
{
|
||||||
|
double ret_val;
|
||||||
|
char temp[40];
|
||||||
|
int i = 0;
|
||||||
|
for(char* c=yytext;*c!='\0';c++){
|
||||||
|
// skipp group delimiter
|
||||||
|
if(*c==grp_delim) continue;
|
||||||
|
// check for a dez delimiter othere then dot
|
||||||
|
if(*c==dez_delim && dez_delim !='.')
|
||||||
|
temp[i++] = '.';
|
||||||
|
else
|
||||||
|
temp[i++] = *c;
|
||||||
|
// check buffor overflow
|
||||||
|
if (i>39) return 0.0;
|
||||||
|
}
|
||||||
|
temp[i] = '\0';
|
||||||
|
|
||||||
|
ret_val = atof( temp );
|
||||||
|
return ret_val;
|
||||||
|
};
|
||||||
|
|
||||||
// error func
|
// error func
|
||||||
void Quantity_yyerror(char *errorinfo)
|
void Quantity_yyerror(char *errorinfo)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -22,6 +22,9 @@
|
||||||
|
|
||||||
DIGIT [0-9]
|
DIGIT [0-9]
|
||||||
ID [a-z][a-z0-9]*
|
ID [a-z][a-z0-9]*
|
||||||
|
EXPO [eE][-+]?[0-9]+
|
||||||
|
DGRP '\.'[0-9][0-9][0-9]
|
||||||
|
CGRP '\,'[0-9][0-9][0-9]
|
||||||
|
|
||||||
%x C_COMMENT
|
%x C_COMMENT
|
||||||
|
|
||||||
|
@ -127,10 +130,8 @@ ID [a-z][a-z0-9]*
|
||||||
"rad" yylval = Quantity::Radian; return UNIT; // radian
|
"rad" yylval = Quantity::Radian; return UNIT; // radian
|
||||||
"gon" yylval = Quantity::Gon; return UNIT; // gon
|
"gon" yylval = Quantity::Gon; return UNIT; // gon
|
||||||
|
|
||||||
|
{DIGIT}+"."?{DIGIT}*{EXPO}? { yylval = num_change(yytext,'.',',');return NUM; }
|
||||||
{DIGIT}*["."","]{DIGIT}*[eE][-+]?[0-9]+ { for(char* c=yytext;*c!='\0';c++) if(*c==',') *c='.'; yylval = atof( yytext ); return NUM; }
|
{DIGIT}+","?{DIGIT}*{EXPO}? { yylval = num_change(yytext,',','.');return NUM; }
|
||||||
{DIGIT}*["."","]{DIGIT}* { for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM; }
|
|
||||||
{DIGIT}+ { yylval = atof( yytext ); return NUM;}
|
|
||||||
|
|
||||||
|
|
||||||
"pi" {yylval = M_PI ; return NUM;} // constant pi
|
"pi" {yylval = M_PI ; return NUM;} // constant pi
|
||||||
|
|
Loading…
Reference in New Issue
Block a user