Make Unit string output parsably and add Pascale and Newtons

This commit is contained in:
jriegel
2013-11-10 15:38:23 +01:00
parent fab8d7d70b
commit ac9395d113
5 changed files with 331 additions and 258 deletions

View File

@@ -41,47 +41,50 @@ ID [a-z][a-z0-9]*
"km" yylval = Quantity(1.0e6 ,Unit(1)); return UNIT; // kilo meter
"l" yylval = Quantity(1000000.0 ,Unit(3)); return UNIT; // Liter dm^3
"yg" yylval = Quantity(1.0e-9 ,Unit(0,1)); return UNIT; // milli gram
"mg" yylval = Quantity(1.0e-6 ,Unit(0,1)); return UNIT; // milli gram
"g" yylval = Quantity(1.0e-3 ,Unit(0,1)); return UNIT; // gram
"kg" yylval = Quantity(1.0 ,Unit(0,1)); return UNIT; // kilo gram
"t" yylval = Quantity(1000.0 ,Unit(0,1)); return UNIT; // ton
"yg" yylval = Quantity(1.0e-9 ,Unit(0,1)); return UNIT; // milli gram
"mg" yylval = Quantity(1.0e-6 ,Unit(0,1)); return UNIT; // milli gram
"g" yylval = Quantity(1.0e-3 ,Unit(0,1)); return UNIT; // gram
"kg" yylval = Quantity(1.0 ,Unit(0,1)); return UNIT; // kilo gram (internal standard for mass)
"t" yylval = Quantity(1000.0 ,Unit(0,1)); return UNIT; // ton
"s" yylval = Quantity(1.0 ,Unit(0,0,1)); return UNIT; // second (internal standard time)
"min" yylval = Quantity(60.0 ,Unit(0,0,1)); return UNIT; // minute
"h" yylval = Quantity(3600.0 ,Unit(0,0,1)); return UNIT; // hour
"s" yylval = Quantity(1.0 ,Unit(0,0,1)); return UNIT; // second (internal standard time)
"min" yylval = Quantity(60.0 ,Unit(0,0,1)); return UNIT; // minute
"h" yylval = Quantity(3600.0 ,Unit(0,0,1)); return UNIT; // hour
"A" yylval = Quantity(1.0 ,Unit(0,0,0,1)); return UNIT; // Ampere (internal standard electric current)
"mA" yylval = Quantity(0.001 ,Unit(0,0,0,1)); return UNIT; // milli Ampere
"kA" yylval = Quantity(1000.0 ,Unit(0,0,0,1)); return UNIT; // kilo Ampere
"MA" yylval = Quantity(1.0e6 ,Unit(0,0,0,1)); return UNIT; // Mega Ampere
"A" yylval = Quantity(1.0 ,Unit(0,0,0,1)); return UNIT; // Ampere (internal standard electric current)
"mA" yylval = Quantity(0.001 ,Unit(0,0,0,1)); return UNIT; // milli Ampere
"kA" yylval = Quantity(1000.0 ,Unit(0,0,0,1)); return UNIT; // kilo Ampere
"MA" yylval = Quantity(1.0e6 ,Unit(0,0,0,1)); return UNIT; // Mega Ampere
"K" yylval = Quantity(1.0 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin (internal standard thermodynamic temperature)
"mK" yylval = Quantity(0.001 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin
"yK" yylval = Quantity(0.000001 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin
"K" yylval = Quantity(1.0 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin (internal standard thermodynamic temperature)
"mK" yylval = Quantity(0.001 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin
"yK" yylval = Quantity(0.000001 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin
"mol" yylval = Quantity(1.0 ,Unit(0,0,0,0,0,1)); return UNIT; // Mole (internal standard amount of substance)
"mol" yylval = Quantity(1.0 ,Unit(0,0,0,0,0,1)); return UNIT; // Mole (internal standard amount of substance)
"cd" yylval = Quantity(1.0 ,Unit(0,0,0,0,0,0,1)); return UNIT; // Candela (internal standard luminous intensity)
"cd" yylval = Quantity(1.0 ,Unit(0,0,0,0,0,0,1)); return UNIT; // Candela (internal standard luminous intensity)
"deg" yylval = Quantity(1.0 ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // degree (internal standard angle)
"rad" yylval = Quantity(180/M_PI ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // radian
"gon" yylval = Quantity(360.0/400.0 ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // gon
"deg" yylval = Quantity(1.0 ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // degree (internal standard angle)
"rad" yylval = Quantity(180/M_PI ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // radian
"gon" yylval = Quantity(360.0/400.0 ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // gon
"in" yylval = Quantity(25.4 ,Unit(1)); return UNIT; // inch
"\"" yylval = Quantity(25.4 ,Unit(1)); return UNIT; // inch
"fo" yylval = Quantity(304.8 ,Unit(1)); return UNIT; // foot
"'" yylval = Quantity(304.8 ,Unit(1)); return UNIT; // foot
"th" yylval = Quantity(0.0254 ,Unit(1)); return UNIT; // thou
"yr" yylval = Quantity(914.4 ,Unit(1)); return UNIT; // yard
"in" yylval = Quantity(25.4 ,Unit(1)); return UNIT; // inch
"\"" yylval = Quantity(25.4 ,Unit(1)); return UNIT; // inch
"fo" yylval = Quantity(304.8 ,Unit(1)); return UNIT; // foot
"'" yylval = Quantity(304.8 ,Unit(1)); return UNIT; // foot
"th" yylval = Quantity(0.0254 ,Unit(1)); return UNIT; // thou
"yr" yylval = Quantity(914.4 ,Unit(1)); return UNIT; // yard
"lb" yylval = Quantity(0.45359237 ,Unit(0,1)); return UNIT; // pound
"oz" yylval = Quantity(0.45359237 ,Unit(0,1)); return UNIT; // ounce
"st" yylval = Quantity(6.35029318 ,Unit(0,1)); return UNIT; // Stone
"cwt" yylval = Quantity(50.80234544 ,Unit(0,1)); return UNIT; // hundredweights
"lb" yylval = Quantity(0.45359237 ,Unit(0,1)); return UNIT; // pound
"oz" yylval = Quantity(0.45359237 ,Unit(0,1)); return UNIT; // ounce
"st" yylval = Quantity(6.35029318 ,Unit(0,1)); return UNIT; // Stone
"cwt" yylval = Quantity(50.80234544 ,Unit(0,1)); return UNIT; // hundredweights
"N" yylval = Quantity(1000.0 ,Unit(1,1,-2)); return UNIT; // Newton (kg*m/s^2)
"Pa" yylval = Quantity(0.001 ,Unit(-1,1,-2)); return UNIT; // Pascal (kg/m*s^2)
{DIGIT}+["."","]{DIGIT}*[eE][-+]?[0-9]+ {for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;}
{DIGIT}+["."","]{DIGIT}* {for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;}