Shifting standard unit definitions

This commit is contained in:
jriegel 2013-11-30 17:57:55 +01:00
parent ae3c1704c9
commit 68f3a1fda4
5 changed files with 464 additions and 276 deletions

View File

@ -144,6 +144,78 @@ void Quantity::setInvalid(void)
_Value = DOUBLE_MIN ; _Value = DOUBLE_MIN ;
} }
// === Predefined types =====================================================
Quantity Quantity::NanoMeter (1.0e-6 ,Unit(1));
Quantity Quantity::MicroMeter (1.0e-3 ,Unit(1));
Quantity Quantity::MilliMeter (1.0 ,Unit(1));
Quantity Quantity::CentiMeter (10.0 ,Unit(1));
Quantity Quantity::DeciMeter (100.0 ,Unit(1));
Quantity Quantity::Meter (1.0e3 ,Unit(1));
Quantity Quantity::KiloMeter (1.0e6 ,Unit(1));
Quantity Quantity::Liter (1000000.0 ,Unit(3));
Quantity Quantity::MicroGram (1.0e-9 ,Unit(0,1));
Quantity Quantity::MilliGram (1.0e-6 ,Unit(0,1));
Quantity Quantity::Gram (1.0e-3 ,Unit(0,1));
Quantity Quantity::KiloGram (1.0 ,Unit(0,1));
Quantity Quantity::Ton (1.0e3 ,Unit(0,1));
Quantity Quantity::Second (1.0 ,Unit(0,0,1));
Quantity Quantity::Minut (60.0 ,Unit(0,0,1));
Quantity Quantity::Hour (3600.0 ,Unit(0,0,1));
Quantity Quantity::Ampere (1.0 ,Unit(0,0,0,1));
Quantity Quantity::MilliAmpere (0.001 ,Unit(0,0,0,1));
Quantity Quantity::KiloAmpere (1000.0 ,Unit(0,0,0,1));
Quantity Quantity::MegaAmpere (1.0e6 ,Unit(0,0,0,1));
Quantity Quantity::Kelvin (1.0 ,Unit(0,0,0,0,1));
Quantity Quantity::MilliKelvin (0.001 ,Unit(0,0,0,0,1));
Quantity Quantity::MicroKelvin (0.000001 ,Unit(0,0,0,0,1));
Quantity Quantity::Mole (1.0 ,Unit(0,0,0,0,0,1));
Quantity Quantity::Candela (1.0 ,Unit(0,0,0,0,0,0,1));
Quantity Quantity::Inch (25.4 ,Unit(1));
Quantity Quantity::Foot (304.8 ,Unit(1));
Quantity Quantity::Thou (0.0254 ,Unit(1));
Quantity Quantity::Yard (914.4 ,Unit(1));
Quantity Quantity::Pound (0.45359237 ,Unit(0,1));
Quantity Quantity::Ounce (0.45359237 ,Unit(0,1));
Quantity Quantity::Stone (6.35029318 ,Unit(0,1));
Quantity Quantity::Hundredweights (50.80234544 ,Unit(0,1));
Quantity Quantity::Newton (1000.0 ,Unit(1,1,-2)); // Newton (kg*m/s^2)
Quantity Quantity::KiloNewton (1e+6 ,Unit(1,1,-2));
Quantity Quantity::MegaNewton (1e+9 ,Unit(1,1,-2));
Quantity Quantity::MilliNewton (1.0 ,Unit(1,1,-2));
Quantity Quantity::Pascal (0.001 ,Unit(-1,1,-2)); // Pascal (kg/m*s^2 or N/m^2)
Quantity Quantity::KiloPascal (1.00 ,Unit(-1,1,-2));
Quantity Quantity::MegaPascal (1000.0 ,Unit(-1,1,-2));
Quantity Quantity::GigaPascal (1e+6 ,Unit(-1,1,-2));
Quantity Quantity::PSI (0.145038 ,Unit(-1,1,-2)); // pounds/in^2
Quantity Quantity::Watt (1e+6 ,Unit(2,1,-3)); // Watt (kg*m^2/s^3)
Quantity Quantity::VoltAmpere (1e+6 ,Unit(2,1,-3)); // VoltAmpere (kg*m^2/s^3)
Quantity Quantity::Joul (1e+6 ,Unit(2,1,-2)); // Joule (kg*m^2/s^2)
Quantity Quantity::NewtonMeter (1e+6 ,Unit(2,1,-2)); // Joule (kg*m^2/s^2)
Quantity Quantity::VoltAmpereSecond (1e+6 ,Unit(2,1,-2)); // Joule (kg*m^2/s^2)
Quantity Quantity::WattSecond (1e+6 ,Unit(2,1,-2)); // Joule (kg*m^2/s^2)
Quantity Quantity::Degree (1.0 ,Unit(0,0,0,0,0,0,0,1)); // degree (internal standard angle)
Quantity Quantity::Radian (180/M_PI ,Unit(0,0,0,0,0,0,0,1)); // radian
Quantity Quantity::Gon (360.0/400.0 ,Unit(0,0,0,0,0,0,0,1)); // gon
// === Parser & Scanner stuff =============================================== // === Parser & Scanner stuff ===============================================
// include the Scanner and the Parser for the Quantitys // include the Scanner and the Parser for the Quantitys

View File

@ -83,6 +83,79 @@ public:
void setInvalid(void); void setInvalid(void);
/** Predefined Unit types. */
//@{
static Quantity NanoMeter;
static Quantity MicroMeter;
static Quantity CentiMeter;
static Quantity DeciMeter;
static Quantity Meter;
static Quantity MilliMeter;
static Quantity KiloMeter;
static Quantity Liter;
static Quantity MicroGram;
static Quantity MilliGram;
static Quantity Gram;
static Quantity KiloGram;
static Quantity Ton;
static Quantity Second ;
static Quantity Minut ;
static Quantity Hour ;
static Quantity Ampere ;
static Quantity MilliAmpere ;
static Quantity KiloAmpere ;
static Quantity MegaAmpere ;
static Quantity Kelvin ;
static Quantity MilliKelvin ;
static Quantity MicroKelvin ;
static Quantity Mole ;
static Quantity Candela ;
static Quantity Inch ;
static Quantity Foot ;
static Quantity Thou ;
static Quantity Yard ;
static Quantity Pound ;
static Quantity Ounce ;
static Quantity Stone ;
static Quantity Hundredweights ;
static Quantity Newton ;
static Quantity KiloNewton ;
static Quantity MegaNewton ;
static Quantity MilliNewton ;
static Quantity Pascal ;
static Quantity KiloPascal ;
static Quantity MegaPascal ;
static Quantity GigaPascal ;
static Quantity PSI ;
static Quantity Watt ;
static Quantity VoltAmpere ;
static Quantity Joul ;
static Quantity NewtonMeter ;
static Quantity VoltAmpereSecond;
static Quantity WattSecond ;
static Quantity Degree ;
static Quantity Radian ;
static Quantity Gon ;
//@}
protected: protected:
double _Value; double _Value;
Unit _Unit; Unit _Unit;

View File

@ -361,8 +361,8 @@ static void yy_fatal_error (yyconst char msg[] );
*yy_cp = '\0'; \ *yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp; (yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 76 #define YY_NUM_RULES 82
#define YY_END_OF_BUFFER 77 #define YY_END_OF_BUFFER 83
/* This struct is not used in this scanner, /* This struct is not used in this scanner,
but its presence is necessary. */ but its presence is necessary. */
struct yy_trans_info struct yy_trans_info
@ -370,22 +370,23 @@ struct yy_trans_info
flex_int32_t yy_verify; flex_int32_t yy_verify;
flex_int32_t yy_nxt; flex_int32_t yy_nxt;
}; };
static yyconst flex_int16_t yy_accept[126] = static yyconst flex_int16_t yy_accept[136] =
{ 0, { 0,
0, 0, 0, 0, 77, 76, 4, 5, 36, 38, 0, 0, 0, 0, 83, 82, 4, 5, 33, 35,
6, 57, 23, 76, 50, 27, 76, 45, 76, 76, 6, 63, 23, 82, 82, 53, 27, 82, 42, 82,
48, 1, 76, 76, 76, 59, 76, 17, 22, 76, 82, 51, 1, 82, 82, 82, 65, 82, 17, 22,
76, 14, 12, 76, 76, 76, 76, 20, 19, 76, 82, 82, 14, 12, 82, 82, 82, 82, 20, 19,
3, 2, 5, 56, 57, 53, 26, 51, 46, 49, 82, 3, 2, 5, 62, 63, 56, 0, 26, 44,
54, 0, 0, 0, 0, 31, 10, 0, 0, 0, 0, 54, 46, 52, 57, 0, 0, 0, 0, 31,
11, 0, 37, 0, 35, 25, 18, 13, 41, 0, 10, 0, 0, 0, 11, 0, 34, 0, 32, 25,
24, 28, 16, 0, 9, 0, 7, 42, 58, 0, 43, 0, 18, 13, 38, 0, 24, 28, 45, 16,
0, 0, 0, 0, 43, 0, 39, 29, 15, 8, 0, 9, 0, 7, 39, 64, 0, 0, 0, 0,
40, 56, 0, 52, 66, 0, 0, 0, 64, 44, 0, 40, 0, 36, 29, 15, 8, 37, 62, 0,
32, 65, 34, 68, 21, 67, 30, 70, 47, 33, 49, 48, 55, 72, 0, 0, 0, 70, 41, 58,
71, 0, 73, 0, 55, 60, 61, 62, 0, 72, 71, 60, 47, 74, 21, 73, 30, 76, 50, 59,
75, 74, 63, 69, 0 77, 0, 79, 0, 61, 66, 67, 68, 0, 78,
81, 80, 69, 75, 0
} ; } ;
static yyconst flex_int32_t yy_ec[256] = static yyconst flex_int32_t yy_ec[256] =
@ -397,13 +398,13 @@ static yyconst flex_int32_t yy_ec[256] =
6, 6, 7, 8, 7, 8, 6, 9, 10, 11, 6, 6, 7, 8, 7, 8, 6, 9, 10, 11,
12, 12, 12, 12, 12, 12, 12, 1, 1, 1, 12, 12, 12, 12, 12, 12, 12, 1, 1, 1,
6, 1, 1, 1, 13, 1, 14, 1, 15, 1, 6, 1, 1, 1, 13, 1, 14, 1, 15, 1,
1, 1, 1, 16, 17, 1, 18, 19, 1, 20, 16, 1, 1, 17, 18, 1, 19, 20, 1, 21,
1, 1, 1, 1, 1, 21, 22, 1, 1, 1, 1, 1, 1, 1, 1, 22, 23, 1, 1, 1,
23, 1, 24, 6, 1, 1, 25, 26, 27, 28, 24, 1, 25, 6, 1, 1, 26, 27, 28, 29,
29, 30, 31, 32, 33, 1, 34, 35, 36, 37, 30, 31, 32, 33, 34, 1, 35, 36, 37, 38,
38, 39, 40, 41, 42, 43, 1, 1, 44, 45, 39, 40, 41, 42, 43, 44, 1, 1, 45, 46,
46, 47, 1, 1, 1, 1, 1, 1, 1, 1, 47, 48, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@ -420,105 +421,109 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1 1, 1, 1, 1, 1
} ; } ;
static yyconst flex_int32_t yy_meta[48] = static yyconst flex_int32_t yy_meta[49] =
{ 0, { 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1 1, 1, 1, 1, 1, 1, 1, 1
} ; } ;
static yyconst flex_int16_t yy_base[127] = static yyconst flex_int16_t yy_base[137] =
{ 0, { 0,
0, 0, 45, 46, 167, 168, 168, 163, 168, 168, 0, 0, 46, 47, 177, 178, 178, 173, 178, 178,
168, 46, 168, 144, 168, 168, 151, 127, 137, 148, 178, 47, 178, 153, 153, 178, 178, 40, 136, 146,
118, 168, 25, 35, 24, 114, 120, 119, 168, 119, 158, 127, 178, 35, 36, 37, 123, 129, 128, 178,
46, 36, 59, 119, 107, 42, 128, 45, 61, 70, 128, 56, 25, 67, 128, 116, 52, 137, 48, 57,
168, 168, 149, 93, 105, 168, 168, 168, 168, 109, 66, 178, 178, 159, 100, 109, 178, 135, 178, 178,
168, 108, 111, 115, 122, 168, 168, 104, 102, 113, 134, 178, 178, 116, 178, 115, 118, 122, 129, 178,
168, 104, 168, 105, 168, 168, 168, 168, 168, 110, 178, 111, 109, 120, 178, 111, 178, 112, 178, 178,
168, 168, 168, 103, 168, 61, 168, 168, 168, 95, 178, 123, 178, 178, 178, 116, 178, 178, 178, 178,
104, 84, 73, 66, 168, 63, 168, 168, 168, 168, 109, 178, 71, 178, 178, 178, 101, 111, 115, 89,
168, 109, 116, 168, 168, 57, 61, 57, 168, 168, 84, 178, 78, 178, 178, 178, 178, 178, 113, 122,
168, 168, 168, 81, 168, 168, 168, 168, 168, 168, 178, 178, 178, 178, 71, 67, 64, 178, 178, 178,
51, 38, 34, 120, 124, 168, 168, 54, 55, 168, 178, 178, 178, 87, 178, 178, 178, 178, 178, 178,
168, 168, 168, 168, 168, 60 63, 50, 37, 126, 130, 178, 178, 57, 57, 178,
178, 178, 178, 178, 178, 53
} ; } ;
static yyconst flex_int16_t yy_def[127] = static yyconst flex_int16_t yy_def[137] =
{ 0, { 0,
125, 1, 126, 126, 125, 125, 125, 125, 125, 125, 135, 1, 136, 136, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 0, 125 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
135, 135, 135, 135, 0, 135
} ; } ;
static yyconst flex_int16_t yy_nxt[216] = static yyconst flex_int16_t yy_nxt[227] =
{ 0, { 0,
6, 7, 8, 9, 10, 11, 11, 6, 12, 12, 6, 7, 8, 9, 10, 11, 11, 6, 12, 12,
12, 12, 13, 14, 6, 15, 16, 17, 18, 19, 12, 12, 13, 14, 6, 15, 16, 17, 18, 19,
20, 21, 22, 6, 23, 6, 24, 25, 26, 27, 20, 21, 22, 23, 6, 24, 6, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 6, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
37, 38, 39, 6, 6, 40, 6, 6, 6, 44, 6, 38, 39, 40, 6, 6, 41, 6, 6, 6,
52, 53, 60, 44, 45, 45, 45, 45, 66, 61, 45, 75, 49, 42, 45, 46, 46, 46, 46, 50,
41, 69, 56, 124, 123, 122, 54, 55, 42, 42, 51, 56, 57, 76, 60, 134, 64, 133, 70, 132,
57, 71, 58, 70, 79, 72, 67, 83, 59, 80, 43, 43, 61, 65, 62, 71, 72, 58, 59, 77,
121, 68, 120, 81, 84, 86, 88, 85, 106, 73, 63, 90, 93, 95, 78, 86, 79, 73, 91, 94,
119, 74, 87, 118, 75, 107, 76, 117, 116, 113, 87, 92, 74, 131, 88, 130, 129, 96, 80, 116,
89, 92, 92, 92, 92, 90, 112, 93, 44, 111, 81, 128, 97, 82, 127, 83, 117, 98, 99, 99,
91, 110, 44, 45, 45, 45, 45, 92, 92, 92, 99, 99, 45, 126, 100, 123, 45, 46, 46, 46,
92, 93, 114, 93, 115, 115, 115, 115, 115, 115, 46, 99, 99, 99, 99, 122, 121, 100, 124, 100,
115, 115, 115, 115, 115, 115, 109, 93, 108, 105,
104, 103, 102, 101, 100, 99, 98, 97, 96, 95,
94, 43, 82, 78, 77, 65, 64, 63, 62, 51,
50, 49, 48, 47, 46, 43, 125, 5, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 100, 120, 119, 118, 115, 114, 113, 112,
111, 110, 109, 108, 107, 106, 105, 104, 103, 102,
101, 44, 89, 85, 84, 69, 68, 67, 66, 55,
54, 53, 52, 48, 47, 44, 135, 5, 135, 135,
135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
135, 135, 135, 135, 135, 135
} ; } ;
static yyconst flex_int16_t yy_chk[216] = static yyconst flex_int16_t yy_chk[227] =
{ 0, { 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 3, 4, 12, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4,
23, 23, 25, 12, 12, 12, 12, 12, 31, 25, 12, 33, 18, 136, 12, 12, 12, 12, 12, 18,
126, 32, 24, 119, 118, 113, 23, 23, 3, 4, 18, 24, 24, 33, 25, 129, 26, 128, 32, 123,
24, 33, 24, 32, 36, 33, 31, 38, 24, 36, 3, 4, 25, 26, 25, 32, 32, 24, 24, 34,
112, 31, 111, 36, 38, 39, 40, 38, 76, 33, 25, 39, 40, 41, 34, 37, 34, 32, 39, 40,
104, 33, 39, 98, 33, 76, 33, 97, 96, 86, 37, 39, 32, 122, 37, 121, 114, 41, 34, 83,
40, 44, 44, 44, 44, 40, 84, 44, 45, 83, 34, 107, 41, 34, 106, 34, 83, 41, 45, 45,
40, 82, 45, 45, 45, 45, 45, 92, 92, 92, 45, 45, 46, 105, 45, 93, 46, 46, 46, 46,
92, 44, 93, 92, 93, 93, 93, 93, 114, 114, 46, 99, 99, 99, 99, 91, 90, 99, 100, 45,
114, 114, 115, 115, 115, 115, 81, 92, 80, 74, 100, 100, 100, 100, 124, 124, 124, 124, 125, 125,
70, 64, 62, 60, 59, 58, 55, 54, 53, 52, 125, 125, 99, 89, 88, 87, 81, 76, 72, 68,
50, 43, 37, 35, 34, 30, 28, 27, 26, 21, 66, 64, 63, 62, 59, 58, 57, 56, 54, 51,
20, 19, 18, 17, 14, 8, 5, 125, 125, 125, 48, 44, 38, 36, 35, 31, 29, 28, 27, 22,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 21, 20, 19, 15, 14, 8, 5, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
125, 125, 125, 125, 125 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
135, 135, 135, 135, 135, 135
} ; } ;
static yy_state_type yy_last_accepting_state; static yy_state_type yy_last_accepting_state;
@ -549,7 +554,7 @@ char *yytext;
/* the manual says "somewhat more optimized" */ /* the manual says "somewhat more optimized" */
/* no support for include files is planned */ /* no support for include files is planned */
#line 553 "QuantityLexer.c" #line 558 "QuantityLexer.c"
#define INITIAL 0 #define INITIAL 0
#define C_COMMENT 1 #define C_COMMENT 1
@ -733,7 +738,7 @@ YY_DECL
#line 28 "QuantityParser.l" #line 28 "QuantityParser.l"
#line 737 "QuantityLexer.c" #line 742 "QuantityLexer.c"
if ( !(yy_init) ) if ( !(yy_init) )
{ {
@ -786,13 +791,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 126 ) if ( yy_current_state >= 136 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp; ++yy_cp;
} }
while ( yy_current_state != 125 ); while ( yy_current_state != 135 );
yy_cp = (yy_last_accepting_cpos); yy_cp = (yy_last_accepting_cpos);
yy_current_state = (yy_last_accepting_state); yy_current_state = (yy_last_accepting_state);
@ -846,354 +851,384 @@ YY_RULE_SETUP
case 7: case 7:
YY_RULE_SETUP YY_RULE_SETUP
#line 40 "QuantityParser.l" #line 40 "QuantityParser.l"
yylval = Quantity(1.0e-6 ,Unit(1)); return UNIT; // nano meter yylval = Quantity::NanoMeter; return UNIT; // nano meter
YY_BREAK YY_BREAK
case 8: case 8:
YY_RULE_SETUP YY_RULE_SETUP
#line 41 "QuantityParser.l" #line 41 "QuantityParser.l"
yylval = Quantity(1.0e-3 ,Unit(1)); return UNIT; // micro meter yylval = Quantity::MicroMeter; return UNIT; // micro meter
YY_BREAK YY_BREAK
case 9: case 9:
YY_RULE_SETUP YY_RULE_SETUP
#line 42 "QuantityParser.l" #line 42 "QuantityParser.l"
yylval = Quantity(1.0 ,Unit(1)); return UNIT; // milli meter yylval = Quantity::MilliMeter; return UNIT; // milli meter (internal standard length)
YY_BREAK YY_BREAK
case 10: case 10:
YY_RULE_SETUP YY_RULE_SETUP
#line 43 "QuantityParser.l" #line 43 "QuantityParser.l"
yylval = Quantity(10.0 ,Unit(1)); return UNIT; // centi meter yylval = Quantity::CentiMeter; return UNIT; // centi meter
YY_BREAK YY_BREAK
case 11: case 11:
YY_RULE_SETUP YY_RULE_SETUP
#line 44 "QuantityParser.l" #line 44 "QuantityParser.l"
yylval = Quantity(100.0 ,Unit(1)); return UNIT; // deci meter yylval = Quantity::DeciMeter; return UNIT; // deci meter
YY_BREAK YY_BREAK
case 12: case 12:
YY_RULE_SETUP YY_RULE_SETUP
#line 45 "QuantityParser.l" #line 45 "QuantityParser.l"
yylval = Quantity(1.0e3 ,Unit(1)); return UNIT; // meter yylval = Quantity::Meter; return UNIT; // meter
YY_BREAK YY_BREAK
case 13: case 13:
YY_RULE_SETUP YY_RULE_SETUP
#line 46 "QuantityParser.l" #line 46 "QuantityParser.l"
yylval = Quantity(1.0e6 ,Unit(1)); return UNIT; // kilo meter yylval = Quantity::KiloMeter; return UNIT; // kilo meter
YY_BREAK YY_BREAK
case 14: case 14:
YY_RULE_SETUP YY_RULE_SETUP
#line 47 "QuantityParser.l" #line 48 "QuantityParser.l"
yylval = Quantity(1000000.0 ,Unit(3)); return UNIT; // Liter dm^3 yylval = Quantity::Liter; return UNIT; // Liter dm^3
YY_BREAK YY_BREAK
case 15: case 15:
YY_RULE_SETUP YY_RULE_SETUP
#line 49 "QuantityParser.l" #line 50 "QuantityParser.l"
yylval = Quantity(1.0e-9 ,Unit(0,1)); return UNIT; // milli gram yylval = Quantity::MicroGram; return UNIT; // micro gram
YY_BREAK YY_BREAK
case 16: case 16:
YY_RULE_SETUP YY_RULE_SETUP
#line 50 "QuantityParser.l" #line 51 "QuantityParser.l"
yylval = Quantity(1.0e-6 ,Unit(0,1)); return UNIT; // milli gram yylval = Quantity::MilliGram; return UNIT; // milli gram
YY_BREAK YY_BREAK
case 17: case 17:
YY_RULE_SETUP YY_RULE_SETUP
#line 51 "QuantityParser.l" #line 52 "QuantityParser.l"
yylval = Quantity(1.0e-3 ,Unit(0,1)); return UNIT; // gram yylval = Quantity::Gram; return UNIT; // gram
YY_BREAK YY_BREAK
case 18: case 18:
YY_RULE_SETUP YY_RULE_SETUP
#line 52 "QuantityParser.l" #line 53 "QuantityParser.l"
yylval = Quantity(1.0 ,Unit(0,1)); return UNIT; // kilo gram (internal standard for mass) yylval = Quantity::KiloGram; return UNIT; // kilo gram (internal standard for mass)
YY_BREAK YY_BREAK
case 19: case 19:
YY_RULE_SETUP YY_RULE_SETUP
#line 53 "QuantityParser.l" #line 54 "QuantityParser.l"
yylval = Quantity(1000.0 ,Unit(0,1)); return UNIT; // ton yylval = Quantity::Ton; return UNIT; // ton
YY_BREAK YY_BREAK
case 20: case 20:
YY_RULE_SETUP YY_RULE_SETUP
#line 55 "QuantityParser.l" #line 56 "QuantityParser.l"
yylval = Quantity(1.0 ,Unit(0,0,1)); return UNIT; // second (internal standard time) yylval = Quantity::Second; return UNIT; // second (internal standard time)
YY_BREAK YY_BREAK
case 21: case 21:
YY_RULE_SETUP YY_RULE_SETUP
#line 56 "QuantityParser.l" #line 57 "QuantityParser.l"
yylval = Quantity(60.0 ,Unit(0,0,1)); return UNIT; // minute yylval = Quantity::Minut; return UNIT; // minute
YY_BREAK YY_BREAK
case 22: case 22:
YY_RULE_SETUP YY_RULE_SETUP
#line 57 "QuantityParser.l" #line 58 "QuantityParser.l"
yylval = Quantity(3600.0 ,Unit(0,0,1)); return UNIT; // hour yylval = Quantity::Hour; return UNIT; // hour
YY_BREAK YY_BREAK
case 23: case 23:
YY_RULE_SETUP YY_RULE_SETUP
#line 59 "QuantityParser.l" #line 60 "QuantityParser.l"
yylval = Quantity(1.0 ,Unit(0,0,0,1)); return UNIT; // Ampere (internal standard electric current) yylval = Quantity::Ampere; return UNIT; // Ampere (internal standard electric current)
YY_BREAK YY_BREAK
case 24: case 24:
YY_RULE_SETUP YY_RULE_SETUP
#line 60 "QuantityParser.l" #line 61 "QuantityParser.l"
yylval = Quantity(0.001 ,Unit(0,0,0,1)); return UNIT; // milli Ampere yylval = Quantity::MilliAmpere; return UNIT; // milli Ampere
YY_BREAK YY_BREAK
case 25: case 25:
YY_RULE_SETUP YY_RULE_SETUP
#line 61 "QuantityParser.l" #line 62 "QuantityParser.l"
yylval = Quantity(1000.0 ,Unit(0,0,0,1)); return UNIT; // kilo Ampere yylval = Quantity::KiloAmpere; return UNIT; // kilo Ampere
YY_BREAK YY_BREAK
case 26: case 26:
YY_RULE_SETUP YY_RULE_SETUP
#line 62 "QuantityParser.l" #line 63 "QuantityParser.l"
yylval = Quantity(1.0e6 ,Unit(0,0,0,1)); return UNIT; // Mega Ampere yylval = Quantity::MegaAmpere; return UNIT; // Mega Ampere
YY_BREAK YY_BREAK
case 27: case 27:
YY_RULE_SETUP YY_RULE_SETUP
#line 64 "QuantityParser.l" #line 65 "QuantityParser.l"
yylval = Quantity(1.0 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin (internal standard thermodynamic temperature) yylval = Quantity::Kelvin; return UNIT; // Kelvin (internal standard thermodynamic temperature)
YY_BREAK YY_BREAK
case 28: case 28:
YY_RULE_SETUP YY_RULE_SETUP
#line 65 "QuantityParser.l" #line 66 "QuantityParser.l"
yylval = Quantity(0.001 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin yylval = Quantity::MilliKelvin; return UNIT; // Kelvin
YY_BREAK YY_BREAK
case 29: case 29:
YY_RULE_SETUP YY_RULE_SETUP
#line 66 "QuantityParser.l" #line 67 "QuantityParser.l"
yylval = Quantity(0.000001 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin yylval = Quantity::MicroKelvin; return UNIT; // Kelvin
YY_BREAK YY_BREAK
case 30: case 30:
YY_RULE_SETUP YY_RULE_SETUP
#line 68 "QuantityParser.l" #line 69 "QuantityParser.l"
yylval = Quantity(1.0 ,Unit(0,0,0,0,0,1)); return UNIT; // Mole (internal standard amount of substance) yylval = Quantity::Mole; return UNIT; // Mole (internal standard amount of substance)
YY_BREAK YY_BREAK
case 31: case 31:
YY_RULE_SETUP YY_RULE_SETUP
#line 70 "QuantityParser.l" #line 71 "QuantityParser.l"
yylval = Quantity(1.0 ,Unit(0,0,0,0,0,0,1)); return UNIT; // Candela (internal standard luminous intensity) yylval = Quantity::Candela; return UNIT; // Candela (internal standard luminous intensity)
YY_BREAK YY_BREAK
case 32: case 32:
YY_RULE_SETUP YY_RULE_SETUP
#line 72 "QuantityParser.l" #line 73 "QuantityParser.l"
yylval = Quantity(1.0 ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // degree (internal standard angle) yylval = Quantity::Inch; return UNIT; // inch
YY_BREAK YY_BREAK
case 33: case 33:
YY_RULE_SETUP YY_RULE_SETUP
#line 73 "QuantityParser.l" #line 74 "QuantityParser.l"
yylval = Quantity(180/M_PI ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // radian yylval = Quantity::Inch; return UNIT; // inch
YY_BREAK YY_BREAK
case 34: case 34:
YY_RULE_SETUP YY_RULE_SETUP
#line 74 "QuantityParser.l" #line 75 "QuantityParser.l"
yylval = Quantity(360.0/400.0 ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // gon yylval = Quantity::Foot; return UNIT; // foot
YY_BREAK YY_BREAK
case 35: case 35:
YY_RULE_SETUP YY_RULE_SETUP
#line 76 "QuantityParser.l" #line 76 "QuantityParser.l"
yylval = Quantity(25.4 ,Unit(1)); return UNIT; // inch yylval = Quantity::Foot; return UNIT; // foot
YY_BREAK YY_BREAK
case 36: case 36:
YY_RULE_SETUP YY_RULE_SETUP
#line 77 "QuantityParser.l" #line 77 "QuantityParser.l"
yylval = Quantity(25.4 ,Unit(1)); return UNIT; // inch yylval = Quantity::Thou; return UNIT; // thou
YY_BREAK YY_BREAK
case 37: case 37:
YY_RULE_SETUP YY_RULE_SETUP
#line 78 "QuantityParser.l" #line 78 "QuantityParser.l"
yylval = Quantity(304.8 ,Unit(1)); return UNIT; // foot yylval = Quantity::Yard; return UNIT; // yard
YY_BREAK YY_BREAK
case 38: case 38:
YY_RULE_SETUP YY_RULE_SETUP
#line 79 "QuantityParser.l" #line 81 "QuantityParser.l"
yylval = Quantity(304.8 ,Unit(1)); return UNIT; // foot yylval = Quantity::Pound; return UNIT; // pound
YY_BREAK YY_BREAK
case 39: case 39:
YY_RULE_SETUP YY_RULE_SETUP
#line 80 "QuantityParser.l" #line 82 "QuantityParser.l"
yylval = Quantity(0.0254 ,Unit(1)); return UNIT; // thou yylval = Quantity::Ounce; return UNIT; // ounce
YY_BREAK YY_BREAK
case 40: case 40:
YY_RULE_SETUP YY_RULE_SETUP
#line 81 "QuantityParser.l" #line 83 "QuantityParser.l"
yylval = Quantity(914.4 ,Unit(1)); return UNIT; // yard yylval = Quantity::Stone; return UNIT; // Stone
YY_BREAK YY_BREAK
case 41: case 41:
YY_RULE_SETUP YY_RULE_SETUP
#line 84 "QuantityParser.l" #line 84 "QuantityParser.l"
yylval = Quantity(0.45359237 ,Unit(0,1)); return UNIT; // pound yylval = Quantity::Hundredweights; return UNIT; // hundredweights
YY_BREAK YY_BREAK
case 42: case 42:
YY_RULE_SETUP YY_RULE_SETUP
#line 85 "QuantityParser.l" #line 86 "QuantityParser.l"
yylval = Quantity(0.45359237 ,Unit(0,1)); return UNIT; // ounce yylval = Quantity::Newton; return UNIT; // Newton (kg*m/s^2)
YY_BREAK YY_BREAK
case 43: case 43:
YY_RULE_SETUP YY_RULE_SETUP
#line 86 "QuantityParser.l" #line 87 "QuantityParser.l"
yylval = Quantity(6.35029318 ,Unit(0,1)); return UNIT; // Stone yylval = Quantity::KiloNewton; return UNIT; // Newton
YY_BREAK YY_BREAK
case 44: case 44:
YY_RULE_SETUP YY_RULE_SETUP
#line 87 "QuantityParser.l" #line 88 "QuantityParser.l"
yylval = Quantity(50.80234544 ,Unit(0,1)); return UNIT; // hundredweights yylval = Quantity::MegaNewton; return UNIT; // Newton
YY_BREAK YY_BREAK
case 45: case 45:
YY_RULE_SETUP YY_RULE_SETUP
#line 89 "QuantityParser.l" #line 89 "QuantityParser.l"
yylval = Quantity(1000.0 ,Unit(1,1,-2)); return UNIT; // Newton (kg*m/s^2) yylval = Quantity::MilliNewton; return UNIT; // Newton
YY_BREAK YY_BREAK
case 46: case 46:
YY_RULE_SETUP YY_RULE_SETUP
#line 91 "QuantityParser.l" #line 91 "QuantityParser.l"
yylval = Quantity(0.001 ,Unit(-1,1,-2)); return UNIT; // Pascal (kg/m*s^2) yylval = Quantity::Pascal; return UNIT; // Pascal (kg/m*s^2 or N/m^2)
YY_BREAK YY_BREAK
case 47: case 47:
YY_RULE_SETUP YY_RULE_SETUP
#line 92 "QuantityParser.l" #line 92 "QuantityParser.l"
yylval = Quantity(0.145038 ,Unit(-1,1,-2)); return UNIT; // pounds/in^2 yylval = Quantity::KiloPascal; return UNIT; // Pascal
YY_BREAK YY_BREAK
case 48: case 48:
YY_RULE_SETUP YY_RULE_SETUP
#line 94 "QuantityParser.l" #line 93 "QuantityParser.l"
yylval = Quantity(1e+6 ,Unit(2,1,-3)); return UNIT; // Watt (kg*m^2/s^3) yylval = Quantity::MegaPascal; return UNIT; // Pascal
YY_BREAK YY_BREAK
case 49: case 49:
YY_RULE_SETUP YY_RULE_SETUP
#line 95 "QuantityParser.l" #line 94 "QuantityParser.l"
yylval = Quantity(1e+6 ,Unit(2,1,-3)); return UNIT; // VoltAmpere (kg*m^2/s^3) yylval = Quantity::GigaPascal; return UNIT; // Pascal
YY_BREAK YY_BREAK
case 50: case 50:
YY_RULE_SETUP YY_RULE_SETUP
#line 97 "QuantityParser.l" #line 96 "QuantityParser.l"
yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) yylval = Quantity::PSI; return UNIT; // pounds/in^2
YY_BREAK YY_BREAK
case 51: case 51:
YY_RULE_SETUP YY_RULE_SETUP
#line 98 "QuantityParser.l" #line 98 "QuantityParser.l"
yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) yylval = Quantity::Watt; return UNIT; // Watt (kg*m^2/s^3)
YY_BREAK YY_BREAK
case 52: case 52:
YY_RULE_SETUP YY_RULE_SETUP
#line 99 "QuantityParser.l" #line 99 "QuantityParser.l"
yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) yylval = Quantity::VoltAmpere; return UNIT; // VoltAmpere (kg*m^2/s^3)
YY_BREAK YY_BREAK
case 53: case 53:
YY_RULE_SETUP YY_RULE_SETUP
#line 100 "QuantityParser.l" #line 101 "QuantityParser.l"
yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) yylval = Quantity::Joul; return UNIT; // Joule (kg*m^2/s^2)
YY_BREAK YY_BREAK
case 54: case 54:
YY_RULE_SETUP YY_RULE_SETUP
#line 101 "QuantityParser.l" #line 102 "QuantityParser.l"
yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) yylval = Quantity::NewtonMeter; return UNIT; // Joule (kg*m^2/s^2)
YY_BREAK YY_BREAK
case 55: case 55:
YY_RULE_SETUP YY_RULE_SETUP
#line 103 "QuantityParser.l" #line 103 "QuantityParser.l"
{for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;} yylval = Quantity::VoltAmpereSecond; return UNIT; // Joule (kg*m^2/s^2)
YY_BREAK YY_BREAK
case 56: case 56:
YY_RULE_SETUP YY_RULE_SETUP
#line 104 "QuantityParser.l" #line 104 "QuantityParser.l"
{for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;} yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2)
YY_BREAK YY_BREAK
case 57: case 57:
YY_RULE_SETUP YY_RULE_SETUP
#line 105 "QuantityParser.l" #line 105 "QuantityParser.l"
{yylval = atof( yytext ); return NUM;} yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2)
YY_BREAK YY_BREAK
case 58: case 58:
YY_RULE_SETUP YY_RULE_SETUP
#line 107 "QuantityParser.l" #line 107 "QuantityParser.l"
{yylval = M_PI ; return NUM;} // constant pi yylval = Quantity::Degree; return UNIT; // degree (internal standard angle)
YY_BREAK YY_BREAK
case 59: case 59:
YY_RULE_SETUP YY_RULE_SETUP
#line 108 "QuantityParser.l" #line 108 "QuantityParser.l"
{yylval = M_E ; return NUM;} // constant e yylval = Quantity::Radian; return UNIT; // radian
YY_BREAK YY_BREAK
case 60: case 60:
YY_RULE_SETUP YY_RULE_SETUP
#line 110 "QuantityParser.l" #line 109 "QuantityParser.l"
return ACOS; yylval = Quantity::Gon; return UNIT; // gon
YY_BREAK YY_BREAK
case 61: case 61:
YY_RULE_SETUP YY_RULE_SETUP
#line 111 "QuantityParser.l" #line 111 "QuantityParser.l"
return ASIN; {for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;}
YY_BREAK YY_BREAK
case 62: case 62:
YY_RULE_SETUP YY_RULE_SETUP
#line 112 "QuantityParser.l" #line 112 "QuantityParser.l"
return ATAN; {for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;}
YY_BREAK YY_BREAK
case 63: case 63:
YY_RULE_SETUP YY_RULE_SETUP
#line 113 "QuantityParser.l" #line 113 "QuantityParser.l"
return ATAN2; {yylval = atof( yytext ); return NUM;}
YY_BREAK YY_BREAK
case 64: case 64:
YY_RULE_SETUP YY_RULE_SETUP
#line 114 "QuantityParser.l" #line 115 "QuantityParser.l"
return COS; {yylval = M_PI ; return NUM;} // constant pi
YY_BREAK YY_BREAK
case 65: case 65:
YY_RULE_SETUP YY_RULE_SETUP
#line 115 "QuantityParser.l" #line 116 "QuantityParser.l"
return EXP; {yylval = M_E ; return NUM;} // constant e
YY_BREAK YY_BREAK
case 66: case 66:
YY_RULE_SETUP YY_RULE_SETUP
#line 116 "QuantityParser.l" #line 118 "QuantityParser.l"
return ABS; return ACOS;
YY_BREAK YY_BREAK
case 67: case 67:
YY_RULE_SETUP YY_RULE_SETUP
#line 117 "QuantityParser.l" #line 119 "QuantityParser.l"
return MOD; return ASIN;
YY_BREAK YY_BREAK
case 68: case 68:
YY_RULE_SETUP YY_RULE_SETUP
#line 118 "QuantityParser.l" #line 120 "QuantityParser.l"
return LOG; return ATAN;
YY_BREAK YY_BREAK
case 69: case 69:
YY_RULE_SETUP YY_RULE_SETUP
#line 119 "QuantityParser.l" #line 121 "QuantityParser.l"
return LOG10; return ATAN2;
YY_BREAK YY_BREAK
case 70: case 70:
YY_RULE_SETUP YY_RULE_SETUP
#line 120 "QuantityParser.l" #line 122 "QuantityParser.l"
return POW; return COS;
YY_BREAK YY_BREAK
case 71: case 71:
YY_RULE_SETUP YY_RULE_SETUP
#line 121 "QuantityParser.l" #line 123 "QuantityParser.l"
return SIN; return EXP;
YY_BREAK YY_BREAK
case 72: case 72:
YY_RULE_SETUP YY_RULE_SETUP
#line 122 "QuantityParser.l" #line 124 "QuantityParser.l"
return SINH; return ABS;
YY_BREAK YY_BREAK
case 73: case 73:
YY_RULE_SETUP YY_RULE_SETUP
#line 123 "QuantityParser.l" #line 125 "QuantityParser.l"
return TAN; return MOD;
YY_BREAK YY_BREAK
case 74: case 74:
YY_RULE_SETUP YY_RULE_SETUP
#line 124 "QuantityParser.l" #line 126 "QuantityParser.l"
return TANH; return LOG;
YY_BREAK YY_BREAK
case 75: case 75:
YY_RULE_SETUP YY_RULE_SETUP
#line 125 "QuantityParser.l" #line 127 "QuantityParser.l"
return SQRT; return LOG10;
YY_BREAK YY_BREAK
case 76: case 76:
YY_RULE_SETUP YY_RULE_SETUP
#line 127 "QuantityParser.l" #line 128 "QuantityParser.l"
return POW;
YY_BREAK
case 77:
YY_RULE_SETUP
#line 129 "QuantityParser.l"
return SIN;
YY_BREAK
case 78:
YY_RULE_SETUP
#line 130 "QuantityParser.l"
return SINH;
YY_BREAK
case 79:
YY_RULE_SETUP
#line 131 "QuantityParser.l"
return TAN;
YY_BREAK
case 80:
YY_RULE_SETUP
#line 132 "QuantityParser.l"
return TANH;
YY_BREAK
case 81:
YY_RULE_SETUP
#line 133 "QuantityParser.l"
return SQRT;
YY_BREAK
case 82:
YY_RULE_SETUP
#line 135 "QuantityParser.l"
ECHO; ECHO;
YY_BREAK YY_BREAK
#line 1197 "QuantityLexer.c" #line 1232 "QuantityLexer.c"
case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(C_COMMENT): case YY_STATE_EOF(C_COMMENT):
yyterminate(); yyterminate();
@ -1487,7 +1522,7 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 126 ) if ( yy_current_state >= 136 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@ -1515,11 +1550,11 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 126 ) if ( yy_current_state >= 136 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 125); yy_is_jam = (yy_current_state == 135);
return yy_is_jam ? 0 : yy_current_state; return yy_is_jam ? 0 : yy_current_state;
} }
@ -2152,4 +2187,4 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables" #define YYTABLES_NAME "yytables"
#line 127 "QuantityParser.l" #line 135 "QuantityParser.l"

View File

@ -37,68 +37,76 @@ ID [a-z][a-z0-9]*
[-+()=/*^] { return *yytext; } [-+()=/*^] { return *yytext; }
"nm" yylval = Quantity(1.0e-6 ,Unit(1)); return UNIT; // nano meter "nm" yylval = Quantity::NanoMeter; return UNIT; // nano meter
"ym" yylval = Quantity(1.0e-3 ,Unit(1)); return UNIT; // micro meter "ym" yylval = Quantity::MicroMeter; return UNIT; // micro meter
"mm" yylval = Quantity(1.0 ,Unit(1)); return UNIT; // milli meter "mm" yylval = Quantity::MilliMeter; return UNIT; // milli meter (internal standard length)
"cm" yylval = Quantity(10.0 ,Unit(1)); return UNIT; // centi meter "cm" yylval = Quantity::CentiMeter; return UNIT; // centi meter
"dm" yylval = Quantity(100.0 ,Unit(1)); return UNIT; // deci meter "dm" yylval = Quantity::DeciMeter; return UNIT; // deci meter
"m" yylval = Quantity(1.0e3 ,Unit(1)); return UNIT; // meter "m" yylval = Quantity::Meter; return UNIT; // meter
"km" yylval = Quantity(1.0e6 ,Unit(1)); return UNIT; // kilo meter "km" yylval = Quantity::KiloMeter; 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 "l" yylval = Quantity::Liter; return UNIT; // Liter dm^3
"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
"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
"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)
"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
"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) "yg" yylval = Quantity::MicroGram; return UNIT; // micro gram
"psi" yylval = Quantity(0.145038 ,Unit(-1,1,-2)); return UNIT; // pounds/in^2 "mg" yylval = Quantity::MilliGram; return UNIT; // milli gram
"g" yylval = Quantity::Gram; return UNIT; // gram
"W" yylval = Quantity(1e+6 ,Unit(2,1,-3)); return UNIT; // Watt (kg*m^2/s^3) "kg" yylval = Quantity::KiloGram; return UNIT; // kilo gram (internal standard for mass)
"VA" yylval = Quantity(1e+6 ,Unit(2,1,-3)); return UNIT; // VoltAmpere (kg*m^2/s^3) "t" yylval = Quantity::Ton; return UNIT; // ton
"J" yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) "s" yylval = Quantity::Second; return UNIT; // second (internal standard time)
"Nm" yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) "min" yylval = Quantity::Minut; return UNIT; // minute
"VAs" yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) "h" yylval = Quantity::Hour; return UNIT; // hour
"CV" yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2)
"Ws" yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) "A" yylval = Quantity::Ampere; return UNIT; // Ampere (internal standard electric current)
"mA" yylval = Quantity::MilliAmpere; return UNIT; // milli Ampere
"kA" yylval = Quantity::KiloAmpere; return UNIT; // kilo Ampere
"MA" yylval = Quantity::MegaAmpere; return UNIT; // Mega Ampere
"K" yylval = Quantity::Kelvin; return UNIT; // Kelvin (internal standard thermodynamic temperature)
"mK" yylval = Quantity::MilliKelvin; return UNIT; // Kelvin
"yK" yylval = Quantity::MicroKelvin; return UNIT; // Kelvin
"mol" yylval = Quantity::Mole; return UNIT; // Mole (internal standard amount of substance)
"cd" yylval = Quantity::Candela; return UNIT; // Candela (internal standard luminous intensity)
"in" yylval = Quantity::Inch; return UNIT; // inch
"\"" yylval = Quantity::Inch; return UNIT; // inch
"fo" yylval = Quantity::Foot; return UNIT; // foot
"'" yylval = Quantity::Foot; return UNIT; // foot
"th" yylval = Quantity::Thou; return UNIT; // thou
"yr" yylval = Quantity::Yard; return UNIT; // yard
"lb" yylval = Quantity::Pound; return UNIT; // pound
"oz" yylval = Quantity::Ounce; return UNIT; // ounce
"st" yylval = Quantity::Stone; return UNIT; // Stone
"cwt" yylval = Quantity::Hundredweights; return UNIT; // hundredweights
"N" yylval = Quantity::Newton; return UNIT; // Newton (kg*m/s^2)
"kN" yylval = Quantity::KiloNewton; return UNIT; // Newton
"MN" yylval = Quantity::MegaNewton; return UNIT; // Newton
"mN" yylval = Quantity::MilliNewton; return UNIT; // Newton
"Pa" yylval = Quantity::Pascal; return UNIT; // Pascal (kg/m*s^2 or N/m^2)
"kPa" yylval = Quantity::KiloPascal; return UNIT; // Pascal
"MPa" yylval = Quantity::MegaPascal; return UNIT; // Pascal
"GPa" yylval = Quantity::GigaPascal; return UNIT; // Pascal
"psi" yylval = Quantity::PSI; return UNIT; // pounds/in^2
"W" yylval = Quantity::Watt; return UNIT; // Watt (kg*m^2/s^3)
"VA" yylval = Quantity::VoltAmpere; return UNIT; // VoltAmpere (kg*m^2/s^3)
"J" yylval = Quantity::Joul; return UNIT; // Joule (kg*m^2/s^2)
"Nm" yylval = Quantity::NewtonMeter; return UNIT; // Joule (kg*m^2/s^2)
"VAs" yylval = Quantity::VoltAmpereSecond; return UNIT; // Joule (kg*m^2/s^2)
"CV" yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2)
"Ws" yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2)
"deg" yylval = Quantity::Degree; return UNIT; // degree (internal standard angle)
"rad" yylval = Quantity::Radian; return UNIT; // radian
"gon" yylval = Quantity::Gon; return UNIT; // gon
{DIGIT}+["."","]{DIGIT}*[eE][-+]?[0-9]+ {for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( 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}* {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;}

View File

@ -94,7 +94,7 @@ public:
static Unit ElectricCurrent; static Unit ElectricCurrent;
static Unit AmountOfSubstance; static Unit AmountOfSubstance;
static Unit LuminoseIntensity; static Unit LuminoseIntensity;
//@}
protected: protected:
UnitSignature Sig; UnitSignature Sig;
}; };