Base: Make Quantity parser accept 1/[unit] as [unit]^-1

This commit is contained in:
Oliver Oxtoby
2017-08-17 15:38:54 +02:00
committed by wmayer
parent 1165d3c6e0
commit 858df142e2
4 changed files with 418 additions and 380 deletions

View File

@@ -183,7 +183,7 @@ extern FILE *yyin, *yyout;
do \
{ \
/* Undo effects of setting up yytext. */ \
int yyless_macro_arg = (n); \
yy_size_t yyless_macro_arg = (n); \
YY_LESS_LINENO(yyless_macro_arg);\
*yy_cp = (yy_hold_char); \
YY_RESTORE_YY_MORE_OFFSET \
@@ -211,7 +211,7 @@ struct yy_buffer_state
/* Number of characters read into yy_ch_buf, not including EOB
* characters.
*/
int yy_n_chars;
yy_size_t yy_n_chars;
/* Whether we "own" the buffer - i.e., we know we created it,
* and can realloc() it to grow it, and should free() it to
@@ -281,7 +281,7 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;
static int yy_n_chars; /* number of characters read into yy_ch_buf */
static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
yy_size_t yyleng;
/* Points to current character in buffer. */
@@ -377,8 +377,8 @@ static void yy_fatal_error (yyconst char msg[] );
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 99
#define YY_END_OF_BUFFER 100
#define YY_NUM_RULES 100
#define YY_END_OF_BUFFER 101
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -386,28 +386,28 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
static yyconst flex_int16_t yy_accept[189] =
static yyconst flex_int16_t yy_accept[190] =
{ 0,
0, 0, 0, 0, 100, 98, 4, 5, 38, 40,
6, 98, 7, 98, 76, 27, 98, 98, 67, 31,
98, 51, 98, 98, 98, 65, 1, 98, 98, 98,
81, 98, 21, 26, 98, 98, 17, 15, 98, 98,
98, 98, 24, 23, 98, 98, 98, 98, 3, 99,
2, 5, 79, 77, 78, 76, 76, 0, 70, 0,
30, 53, 0, 68, 55, 0, 66, 71, 0, 0,
0, 0, 36, 13, 0, 0, 0, 14, 0, 39,
0, 37, 29, 52, 0, 22, 16, 0, 45, 0,
28, 32, 54, 0, 20, 44, 12, 0, 9, 47,
0, 0, 0, 0, 101, 99, 4, 5, 38, 40,
6, 99, 7, 99, 77, 76, 27, 99, 99, 67,
31, 99, 51, 99, 99, 99, 65, 1, 99, 99,
99, 82, 99, 21, 26, 99, 99, 17, 15, 99,
99, 99, 99, 24, 23, 99, 99, 99, 99, 3,
100, 2, 5, 80, 78, 79, 77, 77, 0, 70,
0, 30, 53, 0, 68, 55, 0, 66, 71, 0,
0, 0, 0, 36, 13, 0, 0, 0, 14, 0,
39, 0, 37, 29, 52, 0, 22, 16, 0, 45,
0, 28, 32, 54, 0, 20, 44, 12, 0, 9,
80, 0, 0, 0, 0, 0, 48, 0, 0, 34,
0, 18, 10, 43, 72, 0, 0, 0, 0, 78,
0, 76, 0, 0, 76, 58, 57, 0, 69, 88,
0, 0, 0, 86, 49, 73, 87, 75, 56, 64,
50, 46, 90, 0, 42, 25, 89, 35, 92, 63,
74, 93, 0, 95, 0, 0, 33, 0, 19, 11,
8, 0, 79, 0, 77, 0, 78, 0, 76, 59,
82, 83, 84, 0, 0, 94, 97, 96, 41, 0,
0, 85, 91, 60, 61, 0, 62, 0
47, 81, 0, 0, 0, 0, 0, 48, 0, 0,
34, 0, 18, 10, 43, 72, 0, 0, 0, 0,
79, 0, 77, 0, 0, 77, 58, 57, 0, 69,
89, 0, 0, 0, 87, 49, 73, 88, 75, 56,
64, 50, 46, 91, 0, 42, 25, 90, 35, 93,
63, 74, 94, 0, 96, 0, 0, 33, 0, 19,
11, 8, 0, 80, 0, 78, 0, 79, 0, 77,
59, 83, 84, 85, 0, 0, 95, 98, 97, 41,
0, 0, 86, 92, 60, 61, 0, 62, 0
} ;
static yyconst YY_CHAR yy_ec[256] =
@@ -452,99 +452,100 @@ static yyconst YY_CHAR yy_meta[59] =
1, 1, 1, 1, 1, 1, 1, 1
} ;
static yyconst flex_uint16_t yy_base[190] =
static yyconst flex_uint16_t yy_base[191] =
{ 0,
0, 0, 56, 57, 309, 310, 310, 305, 310, 310,
310, 50, 310, 54, 61, 310, 282, 283, 310, 310,
64, 265, 275, 261, 287, 255, 310, 46, 48, 49,
250, 252, 256, 310, 256, 76, 53, 86, 256, 243,
63, 265, 70, 67, 95, 261, 57, 239, 310, 310,
310, 288, 120, 127, 134, 144, 158, 167, 310, 261,
310, 310, 260, 310, 310, 243, 241, 310, 240, 243,
247, 254, 310, 310, 236, 234, 245, 310, 236, 310,
237, 310, 310, 310, 248, 310, 310, 239, 84, 240,
310, 310, 310, 232, 310, 63, 310, 88, 310, 310,
0, 0, 56, 57, 317, 318, 318, 313, 318, 318,
318, 50, 318, 54, 61, 69, 318, 290, 291, 318,
318, 73, 273, 283, 269, 295, 263, 318, 59, 59,
60, 258, 260, 264, 318, 264, 88, 62, 98, 264,
251, 70, 273, 77, 90, 107, 269, 42, 247, 318,
318, 318, 296, 132, 139, 146, 156, 170, 179, 318,
269, 318, 318, 268, 318, 318, 251, 249, 318, 248,
251, 255, 262, 318, 318, 244, 242, 253, 318, 244,
318, 245, 318, 318, 318, 256, 318, 318, 247, 36,
248, 318, 318, 318, 207, 318, 76, 318, 93, 318,
310, 224, 235, 239, 196, 191, 310, 186, 181, 310,
179, 310, 310, 310, 310, 162, 166, 176, 187, 192,
201, 205, 217, 151, 221, 310, 310, 166, 310, 310,
161, 154, 152, 310, 310, 310, 310, 310, 310, 310,
310, 310, 180, 139, 310, 310, 310, 310, 310, 310,
310, 137, 112, 118, 104, 105, 310, 107, 310, 310,
310, 228, 232, 236, 240, 244, 248, 252, 256, 310,
310, 310, 130, 131, 91, 310, 310, 310, 310, 84,
80, 310, 310, 310, 310, 36, 310, 310, 69
318, 318, 199, 202, 203, 192, 187, 318, 182, 177,
318, 165, 318, 318, 318, 318, 174, 151, 188, 199,
204, 213, 217, 229, 163, 233, 318, 318, 159, 318,
318, 150, 144, 130, 318, 318, 318, 318, 318, 318,
318, 318, 318, 154, 119, 318, 318, 318, 318, 318,
318, 318, 126, 114, 119, 106, 103, 318, 99, 318,
318, 318, 240, 244, 248, 252, 256, 260, 264, 268,
318, 318, 318, 126, 126, 91, 318, 318, 318, 318,
85, 84, 318, 318, 318, 318, 64, 318, 318, 86
} ;
static yyconst flex_int16_t yy_def[190] =
static yyconst flex_int16_t yy_def[191] =
{ 0,
188, 1, 189, 189, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
189, 1, 190, 190, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 0, 188
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 0, 189
} ;
static yyconst flex_uint16_t yy_nxt[369] =
static yyconst flex_uint16_t yy_nxt[377] =
{ 0,
6, 7, 8, 9, 10, 11, 11, 12, 13, 14,
15, 15, 15, 15, 16, 17, 6, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 6, 28, 6,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 6, 42, 43, 44, 45, 6, 6,
46, 6, 6, 6, 6, 6, 47, 48, 50, 50,
53, 53, 53, 53, 54, 54, 54, 54, 55, 49,
56, 57, 57, 57, 57, 69, 70, 58, 61, 73,
187, 77, 89, 51, 51, 62, 63, 74, 78, 75,
83, 71, 72, 58, 90, 108, 76, 84, 85, 101,
15, 16, 15, 15, 17, 18, 6, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 6, 29, 6,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 6, 43, 44, 45, 46, 6, 6,
47, 6, 6, 6, 6, 6, 48, 49, 51, 51,
54, 54, 54, 54, 55, 55, 55, 55, 56, 142,
57, 58, 58, 58, 58, 143, 56, 59, 57, 58,
58, 58, 58, 52, 52, 59, 50, 62, 70, 71,
74, 90, 78, 59, 63, 64, 116, 117, 75, 79,
91, 145, 109, 146, 102, 92, 105, 93, 103, 94,
86, 115, 116, 106, 110, 87, 107, 141, 111, 147,
95, 88, 96, 142, 186, 97, 148, 98, 185, 112,
53, 53, 53, 53, 113, 184, 118, 54, 54, 54,
54, 183, 182, 119, 120, 120, 120, 120, 181, 180,
121, 179, 118, 178, 122, 122, 122, 122, 177, 119,
123, 125, 125, 125, 125, 55, 121, 56, 57, 57,
57, 57, 176, 124, 58, 124, 123, 125, 125, 125,
125, 157, 162, 175, 162, 158, 163, 163, 163, 163,
58, 174, 173, 164, 172, 164, 159, 165, 165, 165,
76, 59, 84, 91, 72, 73, 102, 77, 188, 85,
86, 103, 92, 106, 146, 104, 147, 93, 109, 94,
107, 95, 87, 108, 148, 110, 111, 88, 187, 186,
112, 149, 96, 89, 97, 185, 184, 98, 183, 99,
182, 113, 54, 54, 54, 54, 114, 181, 119, 55,
55, 55, 55, 180, 179, 120, 121, 121, 121, 121,
178, 177, 122, 176, 119, 175, 123, 123, 123, 123,
174, 120, 124, 126, 126, 126, 126, 56, 122, 57,
58, 58, 58, 58, 173, 125, 59, 125, 124, 126,
126, 126, 126, 158, 163, 172, 163, 159, 164, 164,
165, 160, 120, 120, 120, 120, 171, 166, 121, 166,
170, 167, 167, 167, 167, 122, 122, 122, 122, 161,
156, 123, 155, 168, 121, 168, 154, 169, 169, 169,
169, 125, 125, 125, 125, 153, 152, 123, 163, 163,
163, 163, 163, 163, 163, 163, 165, 165, 165, 165,
165, 165, 165, 165, 167, 167, 167, 167, 167, 167,
167, 167, 169, 169, 169, 169, 169, 169, 169, 169,
151, 150, 149, 144, 143, 140, 139, 138, 137, 136,
135, 134, 133, 132, 131, 130, 129, 128, 127, 126,
52, 117, 114, 104, 100, 99, 82, 81, 80, 79,
164, 164, 59, 171, 162, 165, 157, 165, 160, 166,
166, 166, 166, 161, 121, 121, 121, 121, 156, 167,
122, 167, 155, 168, 168, 168, 168, 123, 123, 123,
123, 154, 153, 124, 152, 169, 122, 169, 151, 170,
170, 170, 170, 126, 126, 126, 126, 150, 145, 124,
164, 164, 164, 164, 164, 164, 164, 164, 166, 166,
166, 166, 166, 166, 166, 166, 168, 168, 168, 168,
168, 168, 168, 168, 170, 170, 170, 170, 170, 170,
170, 170, 144, 141, 140, 139, 138, 137, 136, 135,
134, 133, 132, 131, 130, 129, 128, 127, 53, 118,
68, 67, 66, 65, 64, 60, 59, 52, 188, 5,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188
115, 105, 101, 100, 83, 82, 81, 80, 69, 68,
67, 66, 65, 61, 60, 53, 189, 5, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189
} ;
static yyconst flex_int16_t yy_chk[369] =
static yyconst flex_int16_t yy_chk[377] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -552,40 +553,41 @@ static yyconst flex_int16_t yy_chk[369] =
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, 12, 12, 12, 14, 14, 14, 14, 15, 189,
15, 15, 15, 15, 15, 28, 28, 15, 21, 29,
186, 30, 37, 3, 4, 21, 21, 29, 30, 29,
36, 28, 28, 15, 37, 44, 29, 36, 36, 41,
12, 12, 12, 12, 14, 14, 14, 14, 15, 90,
15, 15, 15, 15, 15, 90, 16, 15, 16, 16,
16, 16, 16, 3, 4, 16, 190, 22, 29, 29,
30, 38, 31, 15, 22, 22, 48, 48, 30, 31,
38, 96, 44, 96, 41, 38, 43, 38, 41, 38,
36, 47, 47, 43, 45, 36, 43, 89, 45, 98,
38, 36, 38, 89, 181, 38, 98, 38, 180, 45,
53, 53, 53, 53, 45, 175, 53, 54, 54, 54,
54, 174, 173, 54, 55, 55, 55, 55, 158, 156,
55, 155, 53, 154, 56, 56, 56, 56, 153, 54,
56, 124, 124, 124, 124, 57, 55, 57, 57, 57,
57, 57, 152, 58, 57, 58, 56, 58, 58, 58,
58, 116, 118, 144, 118, 116, 118, 118, 118, 118,
57, 143, 133, 119, 132, 119, 116, 119, 119, 119,
30, 16, 37, 38, 29, 29, 42, 30, 187, 37,
37, 42, 39, 44, 97, 42, 97, 39, 45, 39,
44, 39, 37, 44, 99, 45, 46, 37, 182, 181,
46, 99, 39, 37, 39, 176, 175, 39, 174, 39,
159, 46, 54, 54, 54, 54, 46, 157, 54, 55,
55, 55, 55, 156, 155, 55, 56, 56, 56, 56,
154, 153, 56, 145, 54, 144, 57, 57, 57, 57,
134, 55, 57, 125, 125, 125, 125, 58, 56, 58,
58, 58, 58, 58, 133, 59, 58, 59, 57, 59,
59, 59, 59, 117, 119, 132, 119, 117, 119, 119,
119, 116, 120, 120, 120, 120, 131, 121, 120, 121,
128, 121, 121, 121, 121, 122, 122, 122, 122, 117,
111, 122, 109, 123, 120, 123, 108, 123, 123, 123,
123, 125, 125, 125, 125, 106, 105, 122, 162, 162,
162, 162, 163, 163, 163, 163, 164, 164, 164, 164,
165, 165, 165, 165, 166, 166, 166, 166, 167, 167,
167, 167, 168, 168, 168, 168, 169, 169, 169, 169,
104, 103, 102, 94, 90, 88, 85, 81, 79, 77,
76, 75, 72, 71, 70, 69, 67, 66, 63, 60,
52, 48, 46, 42, 40, 39, 35, 33, 32, 31,
119, 119, 58, 129, 118, 120, 112, 120, 117, 120,
120, 120, 120, 117, 121, 121, 121, 121, 110, 122,
121, 122, 109, 122, 122, 122, 122, 123, 123, 123,
123, 107, 106, 123, 105, 124, 121, 124, 104, 124,
124, 124, 124, 126, 126, 126, 126, 103, 95, 123,
163, 163, 163, 163, 164, 164, 164, 164, 165, 165,
165, 165, 166, 166, 166, 166, 167, 167, 167, 167,
168, 168, 168, 168, 169, 169, 169, 169, 170, 170,
170, 170, 91, 89, 86, 82, 80, 78, 77, 76,
73, 72, 71, 70, 68, 67, 64, 61, 53, 49,
26, 25, 24, 23, 22, 18, 17, 8, 5, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
188, 188, 188, 188, 188, 188, 188, 188
47, 43, 41, 40, 36, 34, 33, 32, 27, 26,
25, 24, 23, 19, 18, 8, 5, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
189, 189, 189, 189, 189, 189
} ;
static yy_state_type yy_last_accepting_state;
@@ -616,7 +618,7 @@ char *yytext;
/* the manual says "somewhat more optimized" */
/* no support for include files is planned */
#line 620 "QuantityLexer.c"
#line 622 "QuantityLexer.c"
#define INITIAL 0
#define C_COMMENT 1
@@ -836,7 +838,7 @@ YY_DECL
#line 31 "QuantityParser.l"
#line 840 "QuantityLexer.c"
#line 842 "QuantityLexer.c"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -863,13 +865,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 189 )
if ( yy_current_state >= 190 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
while ( yy_current_state != 188 );
while ( yy_current_state != 189 );
yy_cp = (yy_last_accepting_cpos);
yy_current_state = (yy_last_accepting_state);
@@ -1268,7 +1270,7 @@ yylval = Quantity::Gon; return UNIT; // gon
case 76:
YY_RULE_SETUP
#line 133 "QuantityParser.l"
{ yylval = Quantity(num_change(yytext,'.',','));return NUM; }
yylval = Quantity(1.0); return ONE;
YY_BREAK
case 77:
YY_RULE_SETUP
@@ -1278,7 +1280,7 @@ YY_RULE_SETUP
case 78:
YY_RULE_SETUP
#line 135 "QuantityParser.l"
{ yylval = Quantity(num_change(yytext,',','.'));return NUM; }
{ yylval = Quantity(num_change(yytext,'.',','));return NUM; }
YY_BREAK
case 79:
YY_RULE_SETUP
@@ -1287,105 +1289,110 @@ YY_RULE_SETUP
YY_BREAK
case 80:
YY_RULE_SETUP
#line 139 "QuantityParser.l"
{yylval = Quantity(M_PI) ; return NUM;} // constant pi
#line 137 "QuantityParser.l"
{ yylval = Quantity(num_change(yytext,',','.'));return NUM; }
YY_BREAK
case 81:
YY_RULE_SETUP
#line 140 "QuantityParser.l"
{yylval = Quantity(M_E) ; return NUM;} // constant e
{yylval = Quantity(M_PI) ; return NUM;} // constant pi
YY_BREAK
case 82:
YY_RULE_SETUP
#line 142 "QuantityParser.l"
return ACOS;
#line 141 "QuantityParser.l"
{yylval = Quantity(M_E) ; return NUM;} // constant e
YY_BREAK
case 83:
YY_RULE_SETUP
#line 143 "QuantityParser.l"
return ASIN;
return ACOS;
YY_BREAK
case 84:
YY_RULE_SETUP
#line 144 "QuantityParser.l"
return ATAN;
return ASIN;
YY_BREAK
case 85:
YY_RULE_SETUP
#line 145 "QuantityParser.l"
return ATAN2;
return ATAN;
YY_BREAK
case 86:
YY_RULE_SETUP
#line 146 "QuantityParser.l"
return COS;
return ATAN2;
YY_BREAK
case 87:
YY_RULE_SETUP
#line 147 "QuantityParser.l"
return EXP;
return COS;
YY_BREAK
case 88:
YY_RULE_SETUP
#line 148 "QuantityParser.l"
return ABS;
return EXP;
YY_BREAK
case 89:
YY_RULE_SETUP
#line 149 "QuantityParser.l"
return MOD;
return ABS;
YY_BREAK
case 90:
YY_RULE_SETUP
#line 150 "QuantityParser.l"
return LOG;
return MOD;
YY_BREAK
case 91:
YY_RULE_SETUP
#line 151 "QuantityParser.l"
return LOG10;
return LOG;
YY_BREAK
case 92:
YY_RULE_SETUP
#line 152 "QuantityParser.l"
return POW;
return LOG10;
YY_BREAK
case 93:
YY_RULE_SETUP
#line 153 "QuantityParser.l"
return SIN;
return POW;
YY_BREAK
case 94:
YY_RULE_SETUP
#line 154 "QuantityParser.l"
return SINH;
return SIN;
YY_BREAK
case 95:
YY_RULE_SETUP
#line 155 "QuantityParser.l"
return TAN;
return SINH;
YY_BREAK
case 96:
YY_RULE_SETUP
#line 156 "QuantityParser.l"
return TANH;
return TAN;
YY_BREAK
case 97:
YY_RULE_SETUP
#line 157 "QuantityParser.l"
return SQRT;
return TANH;
YY_BREAK
case 98:
YY_RULE_SETUP
#line 159 "QuantityParser.l"
return *yytext;
#line 158 "QuantityParser.l"
return SQRT;
YY_BREAK
case 99:
YY_RULE_SETUP
#line 160 "QuantityParser.l"
return *yytext;
YY_BREAK
case 100:
YY_RULE_SETUP
#line 161 "QuantityParser.l"
ECHO;
YY_BREAK
#line 1389 "QuantityLexer.c"
#line 1396 "QuantityLexer.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(C_COMMENT):
yyterminate();
@@ -1574,7 +1581,7 @@ static int yy_get_next_buffer (void)
else
{
yy_size_t num_to_read =
int num_to_read =
YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
while ( num_to_read <= 0 )
@@ -1643,9 +1650,9 @@ static int yy_get_next_buffer (void)
else
ret_val = EOB_ACT_CONTINUE_SCAN;
if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
/* Extend the array by 50%, plus the number we really need. */
int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
@@ -1680,7 +1687,7 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 189 )
if ( yy_current_state >= 190 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1708,11 +1715,11 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 189 )
if ( yy_current_state >= 190 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 188);
yy_is_jam = (yy_current_state == 189);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -2025,7 +2032,7 @@ static void yyensure_buffer_stack (void)
* scanner will even need a stack. We use 2 instead of 1 to avoid an
* immediate realloc on the next call.
*/
num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
(num_to_alloc * sizeof(struct yy_buffer_state*)
);
@@ -2161,7 +2168,7 @@ static void yy_fatal_error (yyconst char* msg )
do \
{ \
/* Undo effects of setting up yytext. */ \
int yyless_macro_arg = (n); \
yy_size_t yyless_macro_arg = (n); \
YY_LESS_LINENO(yyless_macro_arg);\
yytext[yyleng] = (yy_hold_char); \
(yy_c_buf_p) = yytext + yyless_macro_arg; \
@@ -2351,4 +2358,4 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
#line 160 "QuantityParser.l"
#line 161 "QuantityParser.l"

View File

@@ -1,8 +1,8 @@
/* A Bison parser, made by GNU Bison 3.0.2. */
/* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison implementation for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
#define YYBISON_VERSION "3.0.2"
#define YYBISON_VERSION "3.0.4"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -109,24 +109,26 @@ extern int yydebug;
{
UNIT = 258,
NUM = 259,
MINUSSIGN = 260,
ACOS = 261,
ASIN = 262,
ATAN = 263,
ATAN2 = 264,
COS = 265,
EXP = 266,
ABS = 267,
MOD = 268,
LOG = 269,
LOG10 = 270,
POW = 271,
SIN = 272,
SINH = 273,
TAN = 274,
TANH = 275,
SQRT = 276,
NEG = 277
ONE = 260,
MINUSSIGN = 261,
ACOS = 262,
ASIN = 263,
ATAN = 264,
ATAN2 = 265,
COS = 266,
EXP = 267,
ABS = 268,
MOD = 269,
LOG = 270,
LOG10 = 271,
POW = 272,
SIN = 273,
SINH = 274,
TAN = 275,
TANH = 276,
SQRT = 277,
RECIPROCALSLASH = 278,
NEG = 279
};
#endif
@@ -146,7 +148,7 @@ int yyparse (void);
/* Copy the second part of user declarations. */
#line 150 "QuantityParser.c" /* yacc.c:358 */
#line 152 "QuantityParser.c" /* yacc.c:358 */
#ifdef short
# undef short
@@ -386,23 +388,23 @@ union yyalloc
#endif /* !YYCOPY_NEEDED */
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 39
#define YYFINAL 42
/* YYLAST -- Last index in YYTABLE. */
#define YYLAST 200
#define YYLAST 245
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 29
#define YYNTOKENS 31
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 5
/* YYNRULES -- Number of rules. */
#define YYNRULES 33
#define YYNRULES 35
/* YYNSTATES -- Number of states. */
#define YYNSTATES 88
#define YYNSTATES 93
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
#define YYMAXUTOK 277
#define YYMAXUTOK 279
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -415,12 +417,12 @@ static const yytype_uint8 yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
27, 28, 23, 22, 2, 2, 2, 24, 2, 2,
29, 30, 25, 23, 2, 2, 2, 26, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 26, 2, 2, 2, 2, 2,
2, 2, 2, 2, 28, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -438,17 +440,17 @@ static const yytype_uint8 yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 25
15, 16, 17, 18, 19, 20, 21, 22, 24, 27
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint8 yyrline[] =
{
0, 33, 33, 34, 35, 36, 37, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 62, 63,
64, 65, 66, 68
0, 34, 34, 35, 36, 37, 38, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 63,
64, 65, 66, 67, 68, 70
};
#endif
@@ -457,10 +459,11 @@ static const yytype_uint8 yyrline[] =
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
"$end", "error", "$undefined", "UNIT", "NUM", "MINUSSIGN", "ACOS",
"ASIN", "ATAN", "ATAN2", "COS", "EXP", "ABS", "MOD", "LOG", "LOG10",
"POW", "SIN", "SINH", "TAN", "TANH", "SQRT", "'+'", "'*'", "'/'", "NEG",
"'^'", "'('", "')'", "$accept", "input", "num", "unit", "quantity", YY_NULLPTR
"$end", "error", "$undefined", "UNIT", "NUM", "ONE", "MINUSSIGN",
"ACOS", "ASIN", "ATAN", "ATAN2", "COS", "EXP", "ABS", "MOD", "LOG",
"LOG10", "POW", "SIN", "SINH", "TAN", "TANH", "SQRT", "'+'",
"RECIPROCALSLASH", "'*'", "'/'", "NEG", "'^'", "'('", "')'", "$accept",
"input", "num", "unit", "quantity", YY_NULLPTR
};
#endif
@@ -471,14 +474,15 @@ static const yytype_uint16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 43, 42, 47, 277, 94, 40, 41
275, 276, 277, 43, 278, 42, 47, 279, 94, 40,
41
};
# endif
#define YYPACT_NINF -19
#define YYPACT_NINF -22
#define yypact_value_is_default(Yystate) \
(!!((Yystate) == (-19)))
(!!((Yystate) == (-22)))
#define YYTABLE_NINF -1
@@ -489,15 +493,16 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
49, -19, -19, 67, -15, -9, 13, 14, 22, 31,
35, 38, 56, 63, 64, 73, 78, 49, 10, -2,
-10, 67, 67, 76, 67, 67, 67, 67, 67, 67,
67, 67, 67, 67, 67, 67, 67, 75, -17, -19,
67, 67, 67, 67, 67, 12, -10, 12, 12, 67,
-2, -19, 84, 91, 99, 106, 113, 121, 128, 135,
143, 150, 157, 165, 172, -19, -19, 69, 69, 76,
76, 76, 83, 83, -18, -19, -19, -19, -19, -19,
-19, -19, -19, -19, -19, -19, -19, -19
53, -22, -22, -22, 99, -19, -12, -8, -7, -4,
-3, -1, 13, 14, 15, 16, 24, 34, 53, 19,
73, -14, 99, -2, -22, 99, 42, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
61, -21, -22, 51, 99, 99, 99, 99, 99, -2,
-14, -2, -2, 99, 73, -22, 52, 107, 116, 125,
134, 143, 152, 161, 170, 179, 188, 197, 206, 215,
-22, -22, -10, -10, 42, 42, 42, 52, 52, -15,
-22, -22, -22, -22, -22, -22, -22, -22, -22, -22,
-22, -22, -22
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -505,27 +510,28 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
2, 28, 7, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
4, 5, 0, 12, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 33, 0, 0, 0,
0, 6, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 14, 32, 9, 8, 10,
11, 13, 29, 30, 31, 15, 16, 17, 27, 19,
18, 20, 21, 22, 23, 24, 25, 26
2, 29, 7, 8, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3, 4, 5, 0, 8, 0, 13, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
35, 0, 0, 0, 0, 6, 30, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15, 34, 10, 9, 11, 12, 14, 31, 32, 33,
16, 17, 18, 28, 20, 19, 21, 22, 23, 24,
25, 26, 27
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
-19, -19, 2, 0, -4
-22, -22, 2, 0, 59
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
-1, 18, 37, 38, 21
-1, 19, 40, 41, 22
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -533,85 +539,94 @@ static const yytype_int8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_uint8 yytable[] =
{
20, 1, 19, 40, 41, 23, 47, 48, 44, 49,
39, 66, 24, 47, 48, 1, 49, 51, 25, 46,
41, 42, 43, 50, 44, 45, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 45,
26, 27, 67, 68, 69, 70, 71, 72, 73, 28,
46, 74, 1, 2, 3, 4, 5, 6, 29, 7,
8, 9, 30, 10, 11, 31, 12, 13, 14, 15,
16, 2, 3, 4, 5, 6, 17, 7, 8, 9,
40, 10, 11, 32, 12, 13, 14, 15, 16, 40,
33, 34, 42, 43, 22, 44, 40, 41, 42, 43,
35, 44, 44, 65, 40, 36, 41, 42, 43, 49,
44, 40, 75, 41, 42, 43, 0, 44, 40, 76,
0, 41, 42, 43, 0, 44, 40, 77, 41, 42,
43, 0, 44, 40, 78, 41, 42, 43, 0, 44,
40, 79, 0, 41, 42, 43, 0, 44, 40, 80,
41, 42, 43, 0, 44, 40, 81, 41, 42, 43,
0, 44, 40, 82, 0, 41, 42, 43, 0, 44,
40, 83, 41, 42, 43, 0, 44, 40, 84, 41,
42, 43, 0, 44, 0, 85, 0, 41, 42, 43,
0, 44, 0, 86, 41, 42, 43, 0, 44, 0,
87
21, 1, 20, 43, 51, 52, 26, 53, 45, 71,
27, 51, 52, 48, 53, 46, 47, 28, 48, 42,
50, 29, 30, 56, 54, 31, 32, 49, 33, 57,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69, 34, 35, 36, 37, 72, 73, 74, 75,
76, 77, 78, 38, 50, 79, 1, 2, 3, 4,
5, 6, 7, 39, 8, 9, 10, 44, 11, 12,
48, 13, 14, 15, 16, 17, 1, 23, 43, 44,
53, 55, 18, 0, 45, 0, 46, 47, 0, 48,
0, 70, 0, 0, 0, 0, 45, 0, 46, 47,
0, 48, 49, 2, 24, 4, 5, 6, 7, 0,
8, 9, 10, 44, 11, 12, 0, 13, 14, 15,
16, 17, 44, 0, 0, 0, 0, 0, 25, 0,
45, 44, 46, 47, 0, 48, 0, 80, 0, 45,
44, 46, 47, 0, 48, 0, 81, 0, 45, 44,
46, 47, 0, 48, 0, 82, 0, 45, 44, 46,
47, 0, 48, 0, 83, 0, 45, 44, 46, 47,
0, 48, 0, 84, 0, 45, 44, 46, 47, 0,
48, 0, 85, 0, 45, 44, 46, 47, 0, 48,
0, 86, 0, 45, 44, 46, 47, 0, 48, 0,
87, 0, 45, 44, 46, 47, 0, 48, 0, 88,
0, 45, 44, 46, 47, 0, 48, 0, 89, 0,
45, 44, 46, 47, 0, 48, 0, 90, 0, 45,
0, 46, 47, 0, 48, 0, 91, 0, 45, 0,
46, 47, 0, 48, 0, 92
};
static const yytype_int8 yycheck[] =
{
0, 3, 0, 5, 22, 3, 23, 24, 26, 26,
0, 28, 27, 23, 24, 3, 26, 21, 27, 19,
22, 23, 24, 21, 26, 27, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 27,
27, 27, 40, 41, 42, 43, 44, 47, 48, 27,
50, 49, 3, 4, 5, 6, 7, 8, 27, 10,
11, 12, 27, 14, 15, 27, 17, 18, 19, 20,
21, 4, 5, 6, 7, 8, 27, 10, 11, 12,
5, 14, 15, 27, 17, 18, 19, 20, 21, 5,
27, 27, 23, 24, 27, 26, 5, 22, 23, 24,
27, 26, 26, 28, 5, 27, 22, 23, 24, 26,
26, 5, 28, 22, 23, 24, -1, 26, 5, 28,
-1, 22, 23, 24, -1, 26, 5, 28, 22, 23,
24, -1, 26, 5, 28, 22, 23, 24, -1, 26,
5, 28, -1, 22, 23, 24, -1, 26, 5, 28,
22, 23, 24, -1, 26, 5, 28, 22, 23, 24,
-1, 26, 5, 28, -1, 22, 23, 24, -1, 26,
5, 28, 22, 23, 24, -1, 26, 5, 28, 22,
23, 24, -1, 26, -1, 28, -1, 22, 23, 24,
-1, 26, -1, 28, 22, 23, 24, -1, 26, -1,
28
0, 3, 0, 5, 25, 26, 4, 28, 23, 30,
29, 25, 26, 28, 28, 25, 26, 29, 28, 0,
20, 29, 29, 23, 22, 29, 29, 29, 29, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
38, 39, 29, 29, 29, 29, 44, 45, 46, 47,
48, 51, 52, 29, 54, 53, 3, 4, 5, 6,
7, 8, 9, 29, 11, 12, 13, 6, 15, 16,
28, 18, 19, 20, 21, 22, 3, 26, 5, 6,
28, 22, 29, -1, 23, -1, 25, 26, -1, 28,
-1, 30, -1, -1, -1, -1, 23, -1, 25, 26,
-1, 28, 29, 4, 5, 6, 7, 8, 9, -1,
11, 12, 13, 6, 15, 16, -1, 18, 19, 20,
21, 22, 6, -1, -1, -1, -1, -1, 29, -1,
23, 6, 25, 26, -1, 28, -1, 30, -1, 23,
6, 25, 26, -1, 28, -1, 30, -1, 23, 6,
25, 26, -1, 28, -1, 30, -1, 23, 6, 25,
26, -1, 28, -1, 30, -1, 23, 6, 25, 26,
-1, 28, -1, 30, -1, 23, 6, 25, 26, -1,
28, -1, 30, -1, 23, 6, 25, 26, -1, 28,
-1, 30, -1, 23, 6, 25, 26, -1, 28, -1,
30, -1, 23, 6, 25, 26, -1, 28, -1, 30,
-1, 23, 6, 25, 26, -1, 28, -1, 30, -1,
23, 6, 25, 26, -1, 28, -1, 30, -1, 23,
-1, 25, 26, -1, 28, -1, 30, -1, 23, -1,
25, 26, -1, 28, -1, 30
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
0, 3, 4, 5, 6, 7, 8, 10, 11, 12,
14, 15, 17, 18, 19, 20, 21, 27, 30, 31,
32, 33, 27, 31, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 27, 27, 27, 31, 32, 0,
5, 22, 23, 24, 26, 27, 32, 23, 24, 26,
31, 33, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 28, 28, 31, 31, 31,
31, 31, 32, 32, 31, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28
0, 3, 4, 5, 6, 7, 8, 9, 11, 12,
13, 15, 16, 18, 19, 20, 21, 22, 29, 32,
33, 34, 35, 26, 5, 29, 33, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
33, 34, 0, 5, 6, 23, 25, 26, 28, 29,
34, 25, 26, 28, 33, 35, 34, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
30, 30, 33, 33, 33, 33, 33, 34, 34, 33,
30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
30, 30, 30
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
0, 29, 30, 30, 30, 30, 30, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 32, 32,
32, 32, 32, 33
0, 31, 32, 32, 32, 32, 32, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 34,
34, 34, 34, 34, 34, 35
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
static const yytype_uint8 yyr2[] =
{
0, 2, 0, 1, 1, 1, 2, 1, 3, 3,
3, 3, 2, 3, 3, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 1, 3,
3, 3, 3, 2
0, 2, 0, 1, 1, 1, 2, 1, 1, 3,
3, 3, 3, 2, 3, 3, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
3, 3, 3, 3, 3, 2
};
@@ -1288,199 +1303,211 @@ yyreduce:
switch (yyn)
{
case 2:
#line 33 "QuantityParser.y" /* yacc.c:1646 */
#line 34 "QuantityParser.y" /* yacc.c:1646 */
{ QuantResult = Quantity(DOUBLE_MIN); /* empty input */ }
#line 1294 "QuantityParser.c" /* yacc.c:1646 */
#line 1309 "QuantityParser.c" /* yacc.c:1646 */
break;
case 3:
#line 34 "QuantityParser.y" /* yacc.c:1646 */
#line 35 "QuantityParser.y" /* yacc.c:1646 */
{ QuantResult = (yyvsp[0]) ; }
#line 1300 "QuantityParser.c" /* yacc.c:1646 */
#line 1315 "QuantityParser.c" /* yacc.c:1646 */
break;
case 4:
#line 35 "QuantityParser.y" /* yacc.c:1646 */
#line 36 "QuantityParser.y" /* yacc.c:1646 */
{ QuantResult = (yyvsp[0]) ; }
#line 1306 "QuantityParser.c" /* yacc.c:1646 */
#line 1321 "QuantityParser.c" /* yacc.c:1646 */
break;
case 5:
#line 36 "QuantityParser.y" /* yacc.c:1646 */
#line 37 "QuantityParser.y" /* yacc.c:1646 */
{ QuantResult = (yyvsp[0]) ; }
#line 1312 "QuantityParser.c" /* yacc.c:1646 */
#line 1327 "QuantityParser.c" /* yacc.c:1646 */
break;
case 6:
#line 37 "QuantityParser.y" /* yacc.c:1646 */
#line 38 "QuantityParser.y" /* yacc.c:1646 */
{ QuantResult = (yyvsp[-1]) + (yyvsp[0]); }
#line 1318 "QuantityParser.c" /* yacc.c:1646 */
#line 1333 "QuantityParser.c" /* yacc.c:1646 */
break;
case 7:
#line 39 "QuantityParser.y" /* yacc.c:1646 */
#line 40 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
#line 1324 "QuantityParser.c" /* yacc.c:1646 */
#line 1339 "QuantityParser.c" /* yacc.c:1646 */
break;
case 8:
#line 40 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity((yyvsp[-2]).getValue() + (yyvsp[0]).getValue()); }
#line 1330 "QuantityParser.c" /* yacc.c:1646 */
#line 41 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
#line 1345 "QuantityParser.c" /* yacc.c:1646 */
break;
case 9:
#line 41 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity((yyvsp[-2]).getValue() - (yyvsp[0]).getValue()); }
#line 1336 "QuantityParser.c" /* yacc.c:1646 */
#line 42 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity((yyvsp[-2]).getValue() + (yyvsp[0]).getValue()); }
#line 1351 "QuantityParser.c" /* yacc.c:1646 */
break;
case 10:
#line 42 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity((yyvsp[-2]).getValue() * (yyvsp[0]).getValue()); }
#line 1342 "QuantityParser.c" /* yacc.c:1646 */
#line 43 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity((yyvsp[-2]).getValue() - (yyvsp[0]).getValue()); }
#line 1357 "QuantityParser.c" /* yacc.c:1646 */
break;
case 11:
#line 43 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity((yyvsp[-2]).getValue() / (yyvsp[0]).getValue()); }
#line 1348 "QuantityParser.c" /* yacc.c:1646 */
#line 44 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity((yyvsp[-2]).getValue() * (yyvsp[0]).getValue()); }
#line 1363 "QuantityParser.c" /* yacc.c:1646 */
break;
case 12:
#line 44 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(-(yyvsp[0]).getValue()); }
#line 1354 "QuantityParser.c" /* yacc.c:1646 */
#line 45 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity((yyvsp[-2]).getValue() / (yyvsp[0]).getValue()); }
#line 1369 "QuantityParser.c" /* yacc.c:1646 */
break;
case 13:
#line 45 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(pow ((yyvsp[-2]).getValue(), (yyvsp[0]).getValue()));}
#line 1360 "QuantityParser.c" /* yacc.c:1646 */
#line 46 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(-(yyvsp[0]).getValue()); }
#line 1375 "QuantityParser.c" /* yacc.c:1646 */
break;
case 14:
#line 46 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-1]); }
#line 1366 "QuantityParser.c" /* yacc.c:1646 */
#line 47 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(pow ((yyvsp[-2]).getValue(), (yyvsp[0]).getValue()));}
#line 1381 "QuantityParser.c" /* yacc.c:1646 */
break;
case 15:
#line 47 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(acos((yyvsp[-1]).getValue())); }
#line 1372 "QuantityParser.c" /* yacc.c:1646 */
#line 48 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-1]); }
#line 1387 "QuantityParser.c" /* yacc.c:1646 */
break;
case 16:
#line 48 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(asin((yyvsp[-1]).getValue())); }
#line 1378 "QuantityParser.c" /* yacc.c:1646 */
#line 49 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(acos((yyvsp[-1]).getValue())); }
#line 1393 "QuantityParser.c" /* yacc.c:1646 */
break;
case 17:
#line 49 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(atan((yyvsp[-1]).getValue())); }
#line 1384 "QuantityParser.c" /* yacc.c:1646 */
#line 50 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(asin((yyvsp[-1]).getValue())); }
#line 1399 "QuantityParser.c" /* yacc.c:1646 */
break;
case 18:
#line 50 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(fabs((yyvsp[-1]).getValue())); }
#line 1390 "QuantityParser.c" /* yacc.c:1646 */
#line 51 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(atan((yyvsp[-1]).getValue())); }
#line 1405 "QuantityParser.c" /* yacc.c:1646 */
break;
case 19:
#line 51 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(exp((yyvsp[-1]).getValue())); }
#line 1396 "QuantityParser.c" /* yacc.c:1646 */
#line 52 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(fabs((yyvsp[-1]).getValue())); }
#line 1411 "QuantityParser.c" /* yacc.c:1646 */
break;
case 20:
#line 52 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(log((yyvsp[-1]).getValue())); }
#line 1402 "QuantityParser.c" /* yacc.c:1646 */
#line 53 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(exp((yyvsp[-1]).getValue())); }
#line 1417 "QuantityParser.c" /* yacc.c:1646 */
break;
case 21:
#line 53 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(log10((yyvsp[-1]).getValue())); }
#line 1408 "QuantityParser.c" /* yacc.c:1646 */
#line 54 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(log((yyvsp[-1]).getValue())); }
#line 1423 "QuantityParser.c" /* yacc.c:1646 */
break;
case 22:
#line 54 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(sin((yyvsp[-1]).getValue())); }
#line 1414 "QuantityParser.c" /* yacc.c:1646 */
#line 55 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(log10((yyvsp[-1]).getValue())); }
#line 1429 "QuantityParser.c" /* yacc.c:1646 */
break;
case 23:
#line 55 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(sinh((yyvsp[-1]).getValue())); }
#line 1420 "QuantityParser.c" /* yacc.c:1646 */
#line 56 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(sin((yyvsp[-1]).getValue())); }
#line 1435 "QuantityParser.c" /* yacc.c:1646 */
break;
case 24:
#line 56 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(tan((yyvsp[-1]).getValue())); }
#line 1426 "QuantityParser.c" /* yacc.c:1646 */
#line 57 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(sinh((yyvsp[-1]).getValue())); }
#line 1441 "QuantityParser.c" /* yacc.c:1646 */
break;
case 25:
#line 57 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(tanh((yyvsp[-1]).getValue())); }
#line 1432 "QuantityParser.c" /* yacc.c:1646 */
#line 58 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(tan((yyvsp[-1]).getValue())); }
#line 1447 "QuantityParser.c" /* yacc.c:1646 */
break;
case 26:
#line 58 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(sqrt((yyvsp[-1]).getValue())); }
#line 1438 "QuantityParser.c" /* yacc.c:1646 */
#line 59 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(tanh((yyvsp[-1]).getValue())); }
#line 1453 "QuantityParser.c" /* yacc.c:1646 */
break;
case 27:
#line 59 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(cos((yyvsp[-1]).getValue())); }
#line 1444 "QuantityParser.c" /* yacc.c:1646 */
#line 60 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(sqrt((yyvsp[-1]).getValue())); }
#line 1459 "QuantityParser.c" /* yacc.c:1646 */
break;
case 28:
#line 62 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
#line 1450 "QuantityParser.c" /* yacc.c:1646 */
#line 61 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = Quantity(cos((yyvsp[-1]).getValue())); }
#line 1465 "QuantityParser.c" /* yacc.c:1646 */
break;
case 29:
#line 63 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-2]) * (yyvsp[0]); }
#line 1456 "QuantityParser.c" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
#line 1471 "QuantityParser.c" /* yacc.c:1646 */
break;
case 30:
#line 64 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-2]) / (yyvsp[0]); }
#line 1462 "QuantityParser.c" /* yacc.c:1646 */
{ (yyval) = Quantity(1.0)/(yyvsp[0]); }
#line 1477 "QuantityParser.c" /* yacc.c:1646 */
break;
case 31:
#line 65 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-2]).pow ((yyvsp[0])); }
#line 1468 "QuantityParser.c" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-2]) * (yyvsp[0]); }
#line 1483 "QuantityParser.c" /* yacc.c:1646 */
break;
case 32:
#line 66 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-1]); }
#line 1474 "QuantityParser.c" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-2]) / (yyvsp[0]); }
#line 1489 "QuantityParser.c" /* yacc.c:1646 */
break;
case 33:
#line 67 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-2]).pow ((yyvsp[0])); }
#line 1495 "QuantityParser.c" /* yacc.c:1646 */
break;
case 34:
#line 68 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-1]); }
#line 1501 "QuantityParser.c" /* yacc.c:1646 */
break;
case 35:
#line 70 "QuantityParser.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-1])*(yyvsp[0]); }
#line 1480 "QuantityParser.c" /* yacc.c:1646 */
#line 1507 "QuantityParser.c" /* yacc.c:1646 */
break;
#line 1484 "QuantityParser.c" /* yacc.c:1646 */
#line 1511 "QuantityParser.c" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -1708,5 +1735,5 @@ yyreturn:
#endif
return yyresult;
}
#line 72 "QuantityParser.y" /* yacc.c:1906 */
#line 74 "QuantityParser.y" /* yacc.c:1906 */

View File

@@ -130,6 +130,7 @@ CGRP '\,'[0-9][0-9][0-9]
"rad" yylval = Quantity::Radian; return UNIT; // radian
"gon" yylval = Quantity::Gon; return UNIT; // gon
"1" yylval = Quantity(1.0); return ONE;
{DIGIT}+"."?{DIGIT}*{EXPO}? { yylval = Quantity(num_change(yytext,'.',','));return NUM; }
"."?{DIGIT}+{EXPO}? { yylval = Quantity(num_change(yytext,'.',','));return NUM; }
{DIGIT}+","?{DIGIT}*{EXPO}? { yylval = Quantity(num_change(yytext,',','.'));return NUM; }

View File

@@ -17,12 +17,13 @@
%}
/* Bison declarations. */
%token UNIT NUM MINUSSIGN
%token UNIT ONE NUM MINUSSIGN
%token ACOS ASIN ATAN ATAN2 COS EXP ABS MOD LOG LOG10 POW SIN SINH TAN TANH SQRT;
%left MINUSSIGN '+'
%left '*' '/'
%left NEG /* negation--unary minus */
%right '^' /* exponentiation */
%left ONE NUM
@@ -37,6 +38,7 @@
| quantity quantity { QuantResult = $1 + $2; }
;
num: NUM { $$ = $1; }
| ONE { $$ = $1; }
| num '+' num { $$ = Quantity($1.getValue() + $3.getValue()); }
| num MINUSSIGN num { $$ = Quantity($1.getValue() - $3.getValue()); }
| num '*' num { $$ = Quantity($1.getValue() * $3.getValue()); }
@@ -60,6 +62,7 @@
;
unit: UNIT { $$ = $1; }
| ONE '/' unit { $$ = Quantity(1.0)/$3; }
| unit '*' unit { $$ = $1 * $3; }
| unit '/' unit { $$ = $1 / $3; }
| unit '^' num { $$ = $1.pow ($3); }