~ubuntu-branches/ubuntu/maverick/gcalctool/maverick

« back to all changes in this revision

Viewing changes to src/mp-equation-parser.c

  • Committer: Bazaar Package Importer
  • Author(s): Robert Ancell
  • Date: 2009-12-22 10:06:16 UTC
  • mfrom: (1.1.63 upstream)
  • Revision ID: james.westby@ubuntu.com-20091222100616-5ir8k6orw75omhdi
Tags: 5.29.4-0ubuntu1
* New upstream release:
  * Make 0^0 = 1
  * Use superscript digits for scientific notation
  * Clear display when entering a number after an equation
  * Make Ctrl+W a shortcut to quit
  * Updated translations

Show diffs side-by-side

added added

removed removed

Lines of Context:
110
110
// treat exp NAME exp as a function always and pass both arguments, i.e.
111
111
// can do mod using both and all others use $1 * NAME($3)
112
112
 
113
 
static void set_error(yyscan_t yyscanner, int error)
 
113
static void set_error(yyscan_t yyscanner, int error, const char *token)
114
114
{
115
115
    _mp_equation_get_extra(yyscanner)->error = error;
 
116
    if (token)
 
117
        _mp_equation_get_extra(yyscanner)->error_token = strdup(token);
116
118
}
117
119
 
118
120
static void set_result(yyscan_t yyscanner, const MPNumber *x)
120
122
    mp_set_from_mp(x, &(_mp_equation_get_extra(yyscanner))->ret);
121
123
}
122
124
 
123
 
static void get_variable(yyscan_t yyscanner, const char *name, MPNumber *z)
 
125
static int get_variable(yyscan_t yyscanner, const char *name, MPNumber *z)
124
126
{
125
127
    if (!_mp_equation_get_extra(yyscanner)->get_variable(_mp_equation_get_extra(yyscanner), name, z)) {
126
 
        set_error(yyscanner, PARSER_ERR_UNKNOWN_VARIABLE);
127
 
        _mp_equation_get_extra(yyscanner)->error_token = strdup(name);
 
128
        set_error(yyscanner, PARSER_ERR_UNKNOWN_VARIABLE, name);
 
129
        return 0;
128
130
    }
 
131
    
 
132
    return 1;
129
133
}
130
134
 
131
135
static void set_variable(yyscan_t yyscanner, const char *name, MPNumber *x)
133
137
    _mp_equation_get_extra(yyscanner)->set_variable(_mp_equation_get_extra(yyscanner), name, x);
134
138
}
135
139
 
136
 
static void get_function(yyscan_t yyscanner, const char *name, const MPNumber *x, MPNumber *z)
 
140
static int get_function(yyscan_t yyscanner, const char *name, const MPNumber *x, MPNumber *z)
137
141
{
138
142
    if (!_mp_equation_get_extra(yyscanner)->get_function(_mp_equation_get_extra(yyscanner), name, x, z)) {
139
 
        set_error(yyscanner, PARSER_ERR_UNKNOWN_FUNCTION);
140
 
        _mp_equation_get_extra(yyscanner)->error_token = strdup(name);
 
143
        set_error(yyscanner, PARSER_ERR_UNKNOWN_FUNCTION, name);
 
144
        return 0;
141
145
    }
 
146
    return 1;
142
147
}
143
148
 
144
149
static void do_not(yyscan_t yyscanner, const MPNumber *x, MPNumber *z)
145
150
{
146
151
    if (!mp_is_overflow(x, _mp_equation_get_extra(yyscanner)->options->wordlen)) {
147
 
        set_error(yyscanner, PARSER_ERR_OVERFLOW);
 
152
        set_error(yyscanner, PARSER_ERR_OVERFLOW, NULL);
148
153
    }
149
154
    mp_not(x, _mp_equation_get_extra(yyscanner)->options->wordlen, z);
150
155
}
155
160
 
156
161
    if (_mp_equation_get_extra(yyscanner)->options->convert == NULL
157
162
        || !_mp_equation_get_extra(yyscanner)->options->convert(x, x_units, z_units, z, data)) {
158
 
        set_error(yyscanner, PARSER_ERR_UNKNOWN_CONVERSION);
 
163
        set_error(yyscanner, PARSER_ERR_UNKNOWN_CONVERSION, NULL);
159
164
    }
160
165
}
161
166
 
162
167
 
163
168
 
164
169
/* Line 189 of yacc.c  */
165
 
#line 166 "mp-equation-parser.c"
 
170
#line 171 "mp-equation-parser.c"
166
171
 
167
172
/* Enabling traces.  */
168
173
#ifndef YYDEBUG
206
211
     tROOT3 = 272,
207
212
     tROOT = 273,
208
213
     tVARIABLE = 274,
209
 
     tSUPNUM = 275,
210
 
     tSUBNUM = 276,
211
 
     BOOLEAN_OPERATOR = 277,
212
 
     PERCENTAGE = 278,
213
 
     UNARY_MINUS = 279,
214
 
     tINVERSE = 280,
 
214
     tNSUPNUM = 275,
 
215
     tSUPNUM = 276,
 
216
     tSUBNUM = 277,
 
217
     BOOLEAN_OPERATOR = 278,
 
218
     PERCENTAGE = 279,
 
219
     UNARY_MINUS = 280,
215
220
     tIN = 281
216
221
   };
217
222
#endif
233
238
#define tROOT3 272
234
239
#define tROOT 273
235
240
#define tVARIABLE 274
236
 
#define tSUPNUM 275
237
 
#define tSUBNUM 276
238
 
#define BOOLEAN_OPERATOR 277
239
 
#define PERCENTAGE 278
240
 
#define UNARY_MINUS 279
241
 
#define tINVERSE 280
 
241
#define tNSUPNUM 275
 
242
#define tSUPNUM 276
 
243
#define tSUBNUM 277
 
244
#define BOOLEAN_OPERATOR 278
 
245
#define PERCENTAGE 279
 
246
#define UNARY_MINUS 280
242
247
#define tIN 281
243
248
 
244
249
 
249
254
{
250
255
 
251
256
/* Line 214 of yacc.c  */
252
 
#line 91 "./mp-equation-parser.y"
 
257
#line 96 "./mp-equation-parser.y"
253
258
 
254
259
  MPNumber int_t;
255
260
  int integer;
258
263
 
259
264
 
260
265
/* Line 214 of yacc.c  */
261
 
#line 262 "mp-equation-parser.c"
 
266
#line 267 "mp-equation-parser.c"
262
267
} YYSTYPE;
263
268
# define YYSTYPE_IS_TRIVIAL 1
264
269
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
283
288
 
284
289
 
285
290
/* Line 264 of yacc.c  */
286
 
#line 287 "mp-equation-parser.c"
 
291
#line 292 "mp-equation-parser.c"
287
292
 
288
293
#ifdef short
289
294
# undef short
500
505
/* YYFINAL -- State number of the termination state.  */
501
506
#define YYFINAL  34
502
507
/* YYLAST -- Last index in YYTABLE.  */
503
 
#define YYLAST   326
 
508
#define YYLAST   339
504
509
 
505
510
/* YYNTOKENS -- Number of terminals.  */
506
511
#define YYNTOKENS  34
524
529
       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
525
530
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
526
531
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
527
 
       2,     2,     2,    26,     2,     2,     2,    33,     2,     2,
 
532
       2,     2,     2,    27,     2,     2,     2,    33,     2,     2,
528
533
      31,    32,     2,     2,     2,     2,     2,     2,     2,     2,
529
534
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
530
535
       2,    30,     2,     2,     2,     2,     2,     2,     2,     2,
531
536
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
532
537
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
533
 
       2,     2,     2,     2,    25,     2,     2,     2,     2,     2,
534
 
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
535
 
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
536
 
       2,     2,     2,     2,    27,     2,     2,     2,     2,     2,
 
538
       2,     2,     2,     2,    26,     2,     2,     2,     2,     2,
 
539
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
540
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
541
       2,     2,     2,     2,    28,     2,     2,     2,     2,     2,
537
542
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
538
543
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
539
544
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
549
554
       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
550
555
       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
551
556
      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
552
 
      28,    29
 
557
      25,    29
553
558
};
554
559
 
555
560
#if YYDEBUG
568
573
{
569
574
      35,     0,    -1,    36,    -1,    36,    30,    -1,    19,    30,
570
575
      36,    -1,     3,    19,    29,    19,    -1,    19,    29,    19,
571
 
      -1,    31,    36,    32,    -1,    27,    36,    27,    -1,    27,
572
 
      19,    27,    -1,    27,     3,    19,    27,    -1,    36,    25,
573
 
      36,    -1,    36,    20,    -1,    36,    28,    -1,    36,    26,
 
576
      -1,    31,    36,    32,    -1,    28,    36,    28,    -1,    28,
 
577
      19,    28,    -1,    28,     3,    19,    28,    -1,    36,    26,
 
578
      36,    -1,    36,    21,    -1,    36,    20,    -1,    36,    27,
574
579
      -1,    37,    -1,     3,    37,    -1,     5,    36,    -1,     6,
575
580
       3,    -1,    36,    13,    36,    -1,    36,    12,    36,    -1,
576
581
      36,    14,    36,    -1,    36,     6,    36,    33,    -1,    36,
577
582
       5,    36,    33,    -1,    36,     6,    36,    -1,    36,     5,
578
583
      36,    -1,    36,    33,    -1,    15,    36,    -1,    36,    10,
579
584
      36,    -1,    36,     9,    36,    -1,    36,     8,    36,    -1,
580
 
       3,    -1,    19,    36,    -1,    19,    20,    36,    -1,    21,
 
585
       3,    -1,    19,    36,    -1,    19,    21,    36,    -1,    22,
581
586
      18,    36,    -1,    18,    36,    -1,    17,    36,    -1,    16,
582
587
      36,    -1,    19,    -1
583
588
};
585
590
/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
586
591
static const yytype_uint8 yyrline[] =
587
592
{
588
 
       0,   118,   118,   119,   120,   121,   122,   128,   129,   130,
589
 
     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
590
 
     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
591
 
     151,   152,   157,   158,   159,   160,   161,   162,   163
 
593
       0,   123,   123,   124,   125,   126,   127,   133,   134,   135,
 
594
     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
 
595
     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
 
596
     156,   157,   162,   163,   164,   165,   166,   167,   168
592
597
};
593
598
#endif
594
599
 
600
605
  "$end", "error", "$undefined", "tNUMBER", "UNARY_PLUS", "tSUBTRACT",
601
606
  "tADD", "tXNOR", "tXOR", "tOR", "tAND", "MULTIPLICATION", "tMOD",
602
607
  "tDIVIDE", "tMULTIPLY", "tNOT", "tROOT4", "tROOT3", "tROOT", "tVARIABLE",
603
 
  "tSUPNUM", "tSUBNUM", "BOOLEAN_OPERATOR", "PERCENTAGE", "UNARY_MINUS",
604
 
  "'^'", "'!'", "'|'", "tINVERSE", "tIN", "'='", "'('", "')'", "'%'",
 
608
  "tNSUPNUM", "tSUPNUM", "tSUBNUM", "BOOLEAN_OPERATOR", "PERCENTAGE",
 
609
  "UNARY_MINUS", "'^'", "'!'", "'|'", "tIN", "'='", "'('", "')'", "'%'",
605
610
  "$accept", "statement", "exp", "variable", 0
606
611
};
607
612
#endif
613
618
{
614
619
       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
615
620
     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
616
 
     275,   276,   277,   278,   279,    94,    33,   124,   280,   281,
 
621
     275,   276,   277,   278,   279,   280,    94,    33,   124,   281,
617
622
      61,    40,    41,    37
618
623
};
619
624
# endif
645
650
       0,     0,     0,     2,    15,    38,    16,    31,    38,    17,
646
651
      18,    27,    37,    36,    35,     0,     0,     0,    32,     0,
647
652
      31,    38,     0,     0,     1,     0,     0,     0,     0,     0,
648
 
       0,     0,     0,    12,     0,    14,    13,     3,    26,     0,
 
653
       0,     0,     0,    13,    12,     0,    14,     3,    26,     0,
649
654
      33,     6,     4,    34,    38,     9,     8,     7,    25,    24,
650
655
      30,    29,    28,    20,    19,    21,    11,     5,    10,    23,
651
656
      22
659
664
 
660
665
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
661
666
   STATE-NUM.  */
662
 
#define YYPACT_NINF -18
 
667
#define YYPACT_NINF -13
663
668
static const yytype_int16 yypact[] =
664
669
{
665
 
     151,   207,   174,     6,   174,   174,   174,   174,   144,   -17,
666
 
     181,   174,    12,    44,   -18,   200,   -18,   226,   219,    -2,
667
 
     -18,   -12,   -12,   -12,   -12,   174,    -4,   174,   -12,   174,
668
 
     245,   238,    70,    96,   -18,   174,   174,   174,   174,   174,
669
 
     174,   174,   174,   -18,   174,   -18,   -18,   -18,   -18,    -1,
670
 
     -12,   -18,   125,   -12,   257,   264,   -18,   -18,   284,   293,
671
 
      -2,    -2,    -2,   -12,   -12,   -12,    -2,   -18,   264,   -18,
672
 
     -18
 
670
     158,   102,   176,    -2,   176,   176,   176,   176,   138,    -6,
 
671
     194,   176,    13,    44,   -13,   202,   -13,   268,   223,   -10,
 
672
     -13,   -12,   -12,   -12,   -12,   176,    -1,   176,   -12,   176,
 
673
     290,   231,    70,    96,   -13,   176,   176,   176,   176,   176,
 
674
     176,   176,   176,   -13,   -13,   176,   -13,   -13,   -13,     1,
 
675
     -12,   -13,   125,   -12,   252,   260,   -13,   -13,   284,   306,
 
676
     -10,   -10,   -10,   -12,   -12,   -12,   -10,   -13,   260,   -13,
 
677
     -13
673
678
};
674
679
 
675
680
/* YYPGOTO[NTERM-NUM].  */
676
681
static const yytype_int8 yypgoto[] =
677
682
{
678
 
     -18,   -18,     0,     2
 
683
     -13,   -13,     0,     2
679
684
};
680
685
 
681
686
/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
685
690
#define YYTABLE_NINF -1
686
691
static const yytype_uint8 yytable[] =
687
692
{
688
 
      13,    29,    19,    16,    21,    22,    23,    24,    43,    20,
689
 
      32,    33,    34,    44,    45,    51,    46,     0,    67,    16,
690
 
       0,    48,     0,    44,    45,    50,    46,    52,     0,    53,
691
 
       0,    48,    16,     0,     0,    58,    59,    60,    61,    62,
692
 
      63,    64,    65,     0,    66,     0,     0,     0,     0,    35,
 
693
      13,    20,    19,    16,    21,    22,    23,    24,    43,    44,
 
694
      32,    33,    29,    34,    45,    46,    45,    46,    51,    16,
 
695
      67,    48,     0,    48,     0,    50,     0,    52,     0,    53,
 
696
       0,     0,    16,     0,     0,    58,    59,    60,    61,    62,
 
697
      63,    64,    65,     0,     0,    66,     0,     0,     0,    35,
693
698
      36,     0,    37,    38,    39,    32,    40,    41,    42,     0,
694
 
       0,     0,     0,     0,    43,     0,     0,     0,    32,    44,
695
 
      45,     0,    46,     0,    47,    35,    36,    48,    37,    38,
 
699
       0,     0,     0,     0,    43,    44,     0,     0,    32,     0,
 
700
      45,    46,     0,     0,    47,    35,    36,    48,    37,    38,
696
701
      39,     0,    40,    41,    42,     0,     0,     0,     0,     0,
697
 
      43,     0,     0,     0,     0,    44,    45,    56,    46,     0,
 
702
      43,    44,     0,     0,     0,     0,    45,    46,    56,     0,
698
703
       0,    35,    36,    48,    37,    38,    39,     0,    40,    41,
699
 
      42,     0,     0,     0,     0,     0,    43,     0,     0,     0,
700
 
       0,    44,    45,     0,    46,     0,     0,     0,    57,    48,
 
704
      42,     0,     0,     0,     0,     0,    43,    44,     5,     6,
 
705
       7,    15,    45,    46,     9,     0,     0,     0,    57,    48,
701
706
      35,    36,     0,    37,    38,    39,     0,    40,    41,    42,
702
 
       0,     0,     0,     0,     0,    43,     0,    17,     0,     0,
703
 
      44,    45,     0,    46,     1,     0,     2,     3,    48,     4,
704
 
       5,     6,     7,    18,    25,     9,     4,     5,     6,     7,
705
 
       8,    10,     9,    26,    27,    11,     0,    17,    10,     2,
706
 
       3,     0,    11,     0,    30,     0,     2,     3,     0,     4,
707
 
       5,     6,     7,    18,     0,     9,     4,     5,     6,     7,
708
 
      31,    10,     9,    17,     0,    11,     0,     0,    10,     0,
709
 
       0,     0,    11,     0,     0,     4,     5,     6,     7,    18,
710
 
      25,     9,    17,     5,     6,     7,    15,    10,     9,    49,
711
 
       0,    11,     0,     0,     4,     5,     6,     7,    18,    25,
712
 
       9,    17,     5,     6,     7,    18,    10,     9,     0,     0,
713
 
      11,     0,     0,     4,     5,     6,     7,    18,    25,     9,
714
 
      17,     5,     6,     7,    54,    55,     9,    30,     0,    11,
715
 
       0,     0,     4,     5,     6,     7,    18,    25,     9,     4,
716
 
       5,     6,     7,    31,    68,     9,     0,     0,    11,     0,
717
 
       0,    10,    37,    38,    39,    11,    40,    41,    42,     0,
718
 
       0,    37,    38,    39,    43,    40,    41,    42,     0,    44,
719
 
      45,     0,    46,    43,     0,     0,     0,    69,    44,    45,
720
 
       0,    46,     0,     0,     0,     0,    70
 
707
       0,    17,     0,     0,     0,    43,    44,     0,     0,     0,
 
708
       0,    45,    46,     4,     5,     6,     7,    18,    48,    25,
 
709
       9,     1,     0,     2,     3,     0,    10,    26,    27,    11,
 
710
       0,     0,     0,     4,     5,     6,     7,     8,     0,    17,
 
711
       9,     2,     3,     0,     0,     0,    10,     0,     0,    11,
 
712
       0,     4,     5,     6,     7,    18,     0,    30,     9,     2,
 
713
       3,     0,     0,     0,    10,    17,     0,    11,     0,     4,
 
714
       5,     6,     7,    31,     0,     0,     9,     4,     5,     6,
 
715
       7,    18,    10,    25,     9,    11,    17,     0,     0,     0,
 
716
      10,    49,     0,    11,    17,     0,     0,     0,     4,     5,
 
717
       6,     7,    18,     0,    25,     9,     4,     5,     6,     7,
 
718
      18,    10,    25,     9,    11,    17,     0,     0,     0,    55,
 
719
       0,     0,    11,    30,     0,     0,     0,     4,     5,     6,
 
720
       7,    18,     0,    25,     9,     4,     5,     6,     7,    31,
 
721
      68,     0,     9,    11,     5,     6,     7,    18,    10,     0,
 
722
       9,    11,    37,    38,    39,     0,    40,    41,    42,     0,
 
723
       0,     0,     0,     0,    43,    44,     5,     6,     7,    54,
 
724
      45,    46,     9,     0,    37,    38,    39,    69,    40,    41,
 
725
      42,     0,     0,     0,     0,     0,    43,    44,     0,     0,
 
726
       0,     0,    45,    46,     0,     0,     0,     0,     0,    70
721
727
};
722
728
 
723
729
static const yytype_int8 yycheck[] =
724
730
{
725
 
       0,    18,     2,     1,     4,     5,     6,     7,    20,     3,
726
 
      10,    11,     0,    25,    26,    19,    28,    -1,    19,    17,
727
 
      -1,    33,    -1,    25,    26,    25,    28,    27,    -1,    29,
728
 
      -1,    33,    30,    -1,    -1,    35,    36,    37,    38,    39,
729
 
      40,    41,    42,    -1,    44,    -1,    -1,    -1,    -1,     5,
 
731
       0,     3,     2,     1,     4,     5,     6,     7,    20,    21,
 
732
      10,    11,    18,     0,    26,    27,    26,    27,    19,    17,
 
733
      19,    33,    -1,    33,    -1,    25,    -1,    27,    -1,    29,
 
734
      -1,    -1,    30,    -1,    -1,    35,    36,    37,    38,    39,
 
735
      40,    41,    42,    -1,    -1,    45,    -1,    -1,    -1,     5,
730
736
       6,    -1,     8,     9,    10,    55,    12,    13,    14,    -1,
731
 
      -1,    -1,    -1,    -1,    20,    -1,    -1,    -1,    68,    25,
732
 
      26,    -1,    28,    -1,    30,     5,     6,    33,     8,     9,
 
737
      -1,    -1,    -1,    -1,    20,    21,    -1,    -1,    68,    -1,
 
738
      26,    27,    -1,    -1,    30,     5,     6,    33,     8,     9,
733
739
      10,    -1,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
734
 
      20,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    -1,
 
740
      20,    21,    -1,    -1,    -1,    -1,    26,    27,    28,    -1,
735
741
      -1,     5,     6,    33,     8,     9,    10,    -1,    12,    13,
736
 
      14,    -1,    -1,    -1,    -1,    -1,    20,    -1,    -1,    -1,
737
 
      -1,    25,    26,    -1,    28,    -1,    -1,    -1,    32,    33,
 
742
      14,    -1,    -1,    -1,    -1,    -1,    20,    21,    16,    17,
 
743
      18,    19,    26,    27,    22,    -1,    -1,    -1,    32,    33,
738
744
       5,     6,    -1,     8,     9,    10,    -1,    12,    13,    14,
739
 
      -1,    -1,    -1,    -1,    -1,    20,    -1,     3,    -1,    -1,
740
 
      25,    26,    -1,    28,     3,    -1,     5,     6,    33,    15,
741
 
      16,    17,    18,    19,    20,    21,    15,    16,    17,    18,
742
 
      19,    27,    21,    29,    30,    31,    -1,     3,    27,     5,
743
 
       6,    -1,    31,    -1,     3,    -1,     5,     6,    -1,    15,
744
 
      16,    17,    18,    19,    -1,    21,    15,    16,    17,    18,
745
 
      19,    27,    21,     3,    -1,    31,    -1,    -1,    27,    -1,
746
 
      -1,    -1,    31,    -1,    -1,    15,    16,    17,    18,    19,
747
 
      20,    21,     3,    16,    17,    18,    19,    27,    21,    29,
748
 
      -1,    31,    -1,    -1,    15,    16,    17,    18,    19,    20,
749
 
      21,     3,    16,    17,    18,    19,    27,    21,    -1,    -1,
750
 
      31,    -1,    -1,    15,    16,    17,    18,    19,    20,    21,
751
 
       3,    16,    17,    18,    19,    27,    21,     3,    -1,    31,
752
 
      -1,    -1,    15,    16,    17,    18,    19,    20,    21,    15,
753
 
      16,    17,    18,    19,    27,    21,    -1,    -1,    31,    -1,
754
 
      -1,    27,     8,     9,    10,    31,    12,    13,    14,    -1,
755
 
      -1,     8,     9,    10,    20,    12,    13,    14,    -1,    25,
756
 
      26,    -1,    28,    20,    -1,    -1,    -1,    33,    25,    26,
757
 
      -1,    28,    -1,    -1,    -1,    -1,    33
 
745
      -1,     3,    -1,    -1,    -1,    20,    21,    -1,    -1,    -1,
 
746
      -1,    26,    27,    15,    16,    17,    18,    19,    33,    21,
 
747
      22,     3,    -1,     5,     6,    -1,    28,    29,    30,    31,
 
748
      -1,    -1,    -1,    15,    16,    17,    18,    19,    -1,     3,
 
749
      22,     5,     6,    -1,    -1,    -1,    28,    -1,    -1,    31,
 
750
      -1,    15,    16,    17,    18,    19,    -1,     3,    22,     5,
 
751
       6,    -1,    -1,    -1,    28,     3,    -1,    31,    -1,    15,
 
752
      16,    17,    18,    19,    -1,    -1,    22,    15,    16,    17,
 
753
      18,    19,    28,    21,    22,    31,     3,    -1,    -1,    -1,
 
754
      28,    29,    -1,    31,     3,    -1,    -1,    -1,    15,    16,
 
755
      17,    18,    19,    -1,    21,    22,    15,    16,    17,    18,
 
756
      19,    28,    21,    22,    31,     3,    -1,    -1,    -1,    28,
 
757
      -1,    -1,    31,     3,    -1,    -1,    -1,    15,    16,    17,
 
758
      18,    19,    -1,    21,    22,    15,    16,    17,    18,    19,
 
759
      28,    -1,    22,    31,    16,    17,    18,    19,    28,    -1,
 
760
      22,    31,     8,     9,    10,    -1,    12,    13,    14,    -1,
 
761
      -1,    -1,    -1,    -1,    20,    21,    16,    17,    18,    19,
 
762
      26,    27,    22,    -1,     8,     9,    10,    33,    12,    13,
 
763
      14,    -1,    -1,    -1,    -1,    -1,    20,    21,    -1,    -1,
 
764
      -1,    -1,    26,    27,    -1,    -1,    -1,    -1,    -1,    33
758
765
};
759
766
 
760
767
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
761
768
   symbol of state STATE-NUM.  */
762
769
static const yytype_uint8 yystos[] =
763
770
{
764
 
       0,     3,     5,     6,    15,    16,    17,    18,    19,    21,
765
 
      27,    31,    35,    36,    37,    19,    37,     3,    19,    36,
766
 
       3,    36,    36,    36,    36,    20,    29,    30,    36,    18,
 
771
       0,     3,     5,     6,    15,    16,    17,    18,    19,    22,
 
772
      28,    31,    35,    36,    37,    19,    37,     3,    19,    36,
 
773
       3,    36,    36,    36,    36,    21,    29,    30,    36,    18,
767
774
       3,    19,    36,    36,     0,     5,     6,     8,     9,    10,
768
 
      12,    13,    14,    20,    25,    26,    28,    30,    33,    29,
769
 
      36,    19,    36,    36,    19,    27,    27,    32,    36,    36,
770
 
      36,    36,    36,    36,    36,    36,    36,    19,    27,    33,
 
775
      12,    13,    14,    20,    21,    26,    27,    30,    33,    29,
 
776
      36,    19,    36,    36,    19,    28,    28,    32,    36,    36,
 
777
      36,    36,    36,    36,    36,    36,    36,    19,    28,    33,
771
778
      33
772
779
};
773
780
 
1622
1629
        case 2:
1623
1630
 
1624
1631
/* Line 1455 of yacc.c  */
1625
 
#line 118 "./mp-equation-parser.y"
 
1632
#line 123 "./mp-equation-parser.y"
1626
1633
    { set_result(yyscanner, &(yyvsp[(1) - (1)].int_t)); }
1627
1634
    break;
1628
1635
 
1629
1636
  case 3:
1630
1637
 
1631
1638
/* Line 1455 of yacc.c  */
1632
 
#line 119 "./mp-equation-parser.y"
 
1639
#line 124 "./mp-equation-parser.y"
1633
1640
    { set_result(yyscanner, &(yyvsp[(1) - (2)].int_t)); }
1634
1641
    break;
1635
1642
 
1636
1643
  case 4:
1637
1644
 
1638
1645
/* Line 1455 of yacc.c  */
1639
 
#line 120 "./mp-equation-parser.y"
 
1646
#line 125 "./mp-equation-parser.y"
1640
1647
    {set_variable(yyscanner, (yyvsp[(1) - (3)].name), &(yyvsp[(3) - (3)].int_t)); set_result(yyscanner, &(yyvsp[(3) - (3)].int_t)); }
1641
1648
    break;
1642
1649
 
1643
1650
  case 5:
1644
1651
 
1645
1652
/* Line 1455 of yacc.c  */
1646
 
#line 121 "./mp-equation-parser.y"
 
1653
#line 126 "./mp-equation-parser.y"
1647
1654
    { MPNumber t; do_conversion(yyscanner, &(yyvsp[(1) - (4)].int_t), (yyvsp[(2) - (4)].name), (yyvsp[(4) - (4)].name), &t); set_result(yyscanner, &t); free((yyvsp[(2) - (4)].name)); free((yyvsp[(4) - (4)].name)); }
1648
1655
    break;
1649
1656
 
1650
1657
  case 6:
1651
1658
 
1652
1659
/* Line 1455 of yacc.c  */
1653
 
#line 122 "./mp-equation-parser.y"
 
1660
#line 127 "./mp-equation-parser.y"
1654
1661
    { MPNumber x, t; mp_set_from_integer(1, &x); do_conversion(yyscanner, &x, (yyvsp[(1) - (3)].name), (yyvsp[(3) - (3)].name), &t); set_result(yyscanner, &t); free((yyvsp[(1) - (3)].name)); free((yyvsp[(3) - (3)].name)); }
1655
1662
    break;
1656
1663
 
1657
1664
  case 7:
1658
1665
 
1659
1666
/* Line 1455 of yacc.c  */
1660
 
#line 128 "./mp-equation-parser.y"
 
1667
#line 133 "./mp-equation-parser.y"
1661
1668
    {mp_set_from_mp(&(yyvsp[(2) - (3)].int_t), &(yyval.int_t));}
1662
1669
    break;
1663
1670
 
1664
1671
  case 8:
1665
1672
 
1666
1673
/* Line 1455 of yacc.c  */
1667
 
#line 129 "./mp-equation-parser.y"
 
1674
#line 134 "./mp-equation-parser.y"
1668
1675
    {mp_abs(&(yyvsp[(2) - (3)].int_t), &(yyval.int_t));}
1669
1676
    break;
1670
1677
 
1671
1678
  case 9:
1672
1679
 
1673
1680
/* Line 1455 of yacc.c  */
1674
 
#line 130 "./mp-equation-parser.y"
 
1681
#line 135 "./mp-equation-parser.y"
1675
1682
    {get_variable(yyscanner, (yyvsp[(2) - (3)].name), &(yyval.int_t)); mp_abs(&(yyval.int_t), &(yyval.int_t)); free((yyvsp[(2) - (3)].name));}
1676
1683
    break;
1677
1684
 
1678
1685
  case 10:
1679
1686
 
1680
1687
/* Line 1455 of yacc.c  */
1681
 
#line 131 "./mp-equation-parser.y"
 
1688
#line 136 "./mp-equation-parser.y"
1682
1689
    {get_variable(yyscanner, (yyvsp[(3) - (4)].name), &(yyval.int_t)); mp_multiply(&(yyvsp[(2) - (4)].int_t), &(yyval.int_t), &(yyval.int_t)); mp_abs(&(yyval.int_t), &(yyval.int_t)); free((yyvsp[(3) - (4)].name));}
1683
1690
    break;
1684
1691
 
1685
1692
  case 11:
1686
1693
 
1687
1694
/* Line 1455 of yacc.c  */
1688
 
#line 132 "./mp-equation-parser.y"
 
1695
#line 137 "./mp-equation-parser.y"
1689
1696
    {mp_xpowy(&(yyvsp[(1) - (3)].int_t), &(yyvsp[(3) - (3)].int_t), &(yyval.int_t));}
1690
1697
    break;
1691
1698
 
1692
1699
  case 12:
1693
1700
 
1694
1701
/* Line 1455 of yacc.c  */
1695
 
#line 133 "./mp-equation-parser.y"
 
1702
#line 138 "./mp-equation-parser.y"
1696
1703
    {mp_xpowy_integer(&(yyvsp[(1) - (2)].int_t), (yyvsp[(2) - (2)].integer), &(yyval.int_t));}
1697
1704
    break;
1698
1705
 
1699
1706
  case 13:
1700
1707
 
1701
1708
/* Line 1455 of yacc.c  */
1702
 
#line 134 "./mp-equation-parser.y"
1703
 
    {mp_reciprocal(&(yyvsp[(1) - (2)].int_t), &(yyval.int_t));}
 
1709
#line 139 "./mp-equation-parser.y"
 
1710
    {mp_xpowy_integer(&(yyvsp[(1) - (2)].int_t), (yyvsp[(2) - (2)].integer), &(yyval.int_t));}
1704
1711
    break;
1705
1712
 
1706
1713
  case 14:
1707
1714
 
1708
1715
/* Line 1455 of yacc.c  */
1709
 
#line 135 "./mp-equation-parser.y"
 
1716
#line 140 "./mp-equation-parser.y"
1710
1717
    {mp_factorial(&(yyvsp[(1) - (2)].int_t), &(yyval.int_t));}
1711
1718
    break;
1712
1719
 
1713
1720
  case 15:
1714
1721
 
1715
1722
/* Line 1455 of yacc.c  */
1716
 
#line 136 "./mp-equation-parser.y"
 
1723
#line 141 "./mp-equation-parser.y"
1717
1724
    {mp_set_from_mp(&(yyvsp[(1) - (1)].int_t), &(yyval.int_t));}
1718
1725
    break;
1719
1726
 
1720
1727
  case 16:
1721
1728
 
1722
1729
/* Line 1455 of yacc.c  */
1723
 
#line 137 "./mp-equation-parser.y"
 
1730
#line 142 "./mp-equation-parser.y"
1724
1731
    {mp_multiply(&(yyvsp[(1) - (2)].int_t), &(yyvsp[(2) - (2)].int_t), &(yyval.int_t));}
1725
1732
    break;
1726
1733
 
1727
1734
  case 17:
1728
1735
 
1729
1736
/* Line 1455 of yacc.c  */
1730
 
#line 138 "./mp-equation-parser.y"
 
1737
#line 143 "./mp-equation-parser.y"
1731
1738
    {mp_invert_sign(&(yyvsp[(2) - (2)].int_t), &(yyval.int_t));}
1732
1739
    break;
1733
1740
 
1734
1741
  case 18:
1735
1742
 
1736
1743
/* Line 1455 of yacc.c  */
1737
 
#line 139 "./mp-equation-parser.y"
 
1744
#line 144 "./mp-equation-parser.y"
1738
1745
    {mp_set_from_mp(&(yyvsp[(2) - (2)].int_t), &(yyval.int_t));}
1739
1746
    break;
1740
1747
 
1741
1748
  case 19:
1742
1749
 
1743
1750
/* Line 1455 of yacc.c  */
1744
 
#line 140 "./mp-equation-parser.y"
 
1751
#line 145 "./mp-equation-parser.y"
1745
1752
    {mp_divide(&(yyvsp[(1) - (3)].int_t), &(yyvsp[(3) - (3)].int_t), &(yyval.int_t));}
1746
1753
    break;
1747
1754
 
1748
1755
  case 20:
1749
1756
 
1750
1757
/* Line 1455 of yacc.c  */
1751
 
#line 141 "./mp-equation-parser.y"
 
1758
#line 146 "./mp-equation-parser.y"
1752
1759
    {mp_modulus_divide(&(yyvsp[(1) - (3)].int_t), &(yyvsp[(3) - (3)].int_t), &(yyval.int_t));}
1753
1760
    break;
1754
1761
 
1755
1762
  case 21:
1756
1763
 
1757
1764
/* Line 1455 of yacc.c  */
1758
 
#line 142 "./mp-equation-parser.y"
 
1765
#line 147 "./mp-equation-parser.y"
1759
1766
    {mp_multiply(&(yyvsp[(1) - (3)].int_t), &(yyvsp[(3) - (3)].int_t), &(yyval.int_t));}
1760
1767
    break;
1761
1768
 
1762
1769
  case 22:
1763
1770
 
1764
1771
/* Line 1455 of yacc.c  */
1765
 
#line 143 "./mp-equation-parser.y"
 
1772
#line 148 "./mp-equation-parser.y"
1766
1773
    {mp_add_integer(&(yyvsp[(3) - (4)].int_t), 100, &(yyvsp[(3) - (4)].int_t)); mp_divide_integer(&(yyvsp[(3) - (4)].int_t), 100, &(yyvsp[(3) - (4)].int_t)); mp_multiply(&(yyvsp[(1) - (4)].int_t), &(yyvsp[(3) - (4)].int_t), &(yyval.int_t));}
1767
1774
    break;
1768
1775
 
1769
1776
  case 23:
1770
1777
 
1771
1778
/* Line 1455 of yacc.c  */
1772
 
#line 144 "./mp-equation-parser.y"
 
1779
#line 149 "./mp-equation-parser.y"
1773
1780
    {mp_add_integer(&(yyvsp[(3) - (4)].int_t), -100, &(yyvsp[(3) - (4)].int_t)); mp_divide_integer(&(yyvsp[(3) - (4)].int_t), -100, &(yyvsp[(3) - (4)].int_t)); mp_multiply(&(yyvsp[(1) - (4)].int_t), &(yyvsp[(3) - (4)].int_t), &(yyval.int_t));}
1774
1781
    break;
1775
1782
 
1776
1783
  case 24:
1777
1784
 
1778
1785
/* Line 1455 of yacc.c  */
1779
 
#line 145 "./mp-equation-parser.y"
 
1786
#line 150 "./mp-equation-parser.y"
1780
1787
    {mp_add(&(yyvsp[(1) - (3)].int_t), &(yyvsp[(3) - (3)].int_t), &(yyval.int_t));}
1781
1788
    break;
1782
1789
 
1783
1790
  case 25:
1784
1791
 
1785
1792
/* Line 1455 of yacc.c  */
1786
 
#line 146 "./mp-equation-parser.y"
 
1793
#line 151 "./mp-equation-parser.y"
1787
1794
    {mp_subtract(&(yyvsp[(1) - (3)].int_t), &(yyvsp[(3) - (3)].int_t), &(yyval.int_t));}
1788
1795
    break;
1789
1796
 
1790
1797
  case 26:
1791
1798
 
1792
1799
/* Line 1455 of yacc.c  */
1793
 
#line 147 "./mp-equation-parser.y"
 
1800
#line 152 "./mp-equation-parser.y"
1794
1801
    {mp_divide_integer(&(yyvsp[(1) - (2)].int_t), 100, &(yyval.int_t));}
1795
1802
    break;
1796
1803
 
1797
1804
  case 27:
1798
1805
 
1799
1806
/* Line 1455 of yacc.c  */
1800
 
#line 148 "./mp-equation-parser.y"
 
1807
#line 153 "./mp-equation-parser.y"
1801
1808
    {do_not(yyscanner, &(yyvsp[(2) - (2)].int_t), &(yyval.int_t));}
1802
1809
    break;
1803
1810
 
1804
1811
  case 28:
1805
1812
 
1806
1813
/* Line 1455 of yacc.c  */
1807
 
#line 149 "./mp-equation-parser.y"
 
1814
#line 154 "./mp-equation-parser.y"
1808
1815
    {mp_and(&(yyvsp[(1) - (3)].int_t), &(yyvsp[(3) - (3)].int_t), &(yyval.int_t));}
1809
1816
    break;
1810
1817
 
1811
1818
  case 29:
1812
1819
 
1813
1820
/* Line 1455 of yacc.c  */
1814
 
#line 150 "./mp-equation-parser.y"
 
1821
#line 155 "./mp-equation-parser.y"
1815
1822
    {mp_or(&(yyvsp[(1) - (3)].int_t), &(yyvsp[(3) - (3)].int_t), &(yyval.int_t));}
1816
1823
    break;
1817
1824
 
1818
1825
  case 30:
1819
1826
 
1820
1827
/* Line 1455 of yacc.c  */
1821
 
#line 151 "./mp-equation-parser.y"
 
1828
#line 156 "./mp-equation-parser.y"
1822
1829
    {mp_xor(&(yyvsp[(1) - (3)].int_t), &(yyvsp[(3) - (3)].int_t), &(yyval.int_t));}
1823
1830
    break;
1824
1831
 
1825
1832
  case 31:
1826
1833
 
1827
1834
/* Line 1455 of yacc.c  */
1828
 
#line 152 "./mp-equation-parser.y"
 
1835
#line 157 "./mp-equation-parser.y"
1829
1836
    {mp_set_from_mp(&(yyvsp[(1) - (1)].int_t), &(yyval.int_t));}
1830
1837
    break;
1831
1838
 
1832
1839
  case 32:
1833
1840
 
1834
1841
/* Line 1455 of yacc.c  */
1835
 
#line 157 "./mp-equation-parser.y"
1836
 
    {get_function(yyscanner, (yyvsp[(1) - (2)].name), &(yyvsp[(2) - (2)].int_t), &(yyval.int_t)); free((yyvsp[(1) - (2)].name));}
 
1842
#line 162 "./mp-equation-parser.y"
 
1843
    {if (!get_function(yyscanner, (yyvsp[(1) - (2)].name), &(yyvsp[(2) - (2)].int_t), &(yyval.int_t))) YYABORT; free((yyvsp[(1) - (2)].name));}
1837
1844
    break;
1838
1845
 
1839
1846
  case 33:
1840
1847
 
1841
1848
/* Line 1455 of yacc.c  */
1842
 
#line 158 "./mp-equation-parser.y"
1843
 
    {get_function(yyscanner, (yyvsp[(1) - (3)].name), &(yyvsp[(3) - (3)].int_t), &(yyval.int_t)); mp_xpowy_integer(&(yyval.int_t), (yyvsp[(2) - (3)].integer), &(yyval.int_t)); free((yyvsp[(1) - (3)].name));}
 
1849
#line 163 "./mp-equation-parser.y"
 
1850
    {if (!get_function(yyscanner, (yyvsp[(1) - (3)].name), &(yyvsp[(3) - (3)].int_t), &(yyval.int_t))) YYABORT; mp_xpowy_integer(&(yyval.int_t), (yyvsp[(2) - (3)].integer), &(yyval.int_t)); free((yyvsp[(1) - (3)].name));}
1844
1851
    break;
1845
1852
 
1846
1853
  case 34:
1847
1854
 
1848
1855
/* Line 1455 of yacc.c  */
1849
 
#line 159 "./mp-equation-parser.y"
 
1856
#line 164 "./mp-equation-parser.y"
1850
1857
    {mp_root(&(yyvsp[(3) - (3)].int_t), (yyvsp[(1) - (3)].integer), &(yyval.int_t));}
1851
1858
    break;
1852
1859
 
1853
1860
  case 35:
1854
1861
 
1855
1862
/* Line 1455 of yacc.c  */
1856
 
#line 160 "./mp-equation-parser.y"
 
1863
#line 165 "./mp-equation-parser.y"
1857
1864
    {mp_sqrt(&(yyvsp[(2) - (2)].int_t), &(yyval.int_t));}
1858
1865
    break;
1859
1866
 
1860
1867
  case 36:
1861
1868
 
1862
1869
/* Line 1455 of yacc.c  */
1863
 
#line 161 "./mp-equation-parser.y"
 
1870
#line 166 "./mp-equation-parser.y"
1864
1871
    {mp_root(&(yyvsp[(2) - (2)].int_t), 3, &(yyval.int_t));}
1865
1872
    break;
1866
1873
 
1867
1874
  case 37:
1868
1875
 
1869
1876
/* Line 1455 of yacc.c  */
1870
 
#line 162 "./mp-equation-parser.y"
 
1877
#line 167 "./mp-equation-parser.y"
1871
1878
    {mp_root(&(yyvsp[(2) - (2)].int_t), 4, &(yyval.int_t));}
1872
1879
    break;
1873
1880
 
1874
1881
  case 38:
1875
1882
 
1876
1883
/* Line 1455 of yacc.c  */
1877
 
#line 163 "./mp-equation-parser.y"
1878
 
    {get_variable(yyscanner, (yyvsp[(1) - (1)].name), &(yyval.int_t)); free((yyvsp[(1) - (1)].name));}
 
1884
#line 168 "./mp-equation-parser.y"
 
1885
    {if (!get_variable(yyscanner, (yyvsp[(1) - (1)].name), &(yyval.int_t))) YYABORT; free((yyvsp[(1) - (1)].name));}
1879
1886
    break;
1880
1887
 
1881
1888
 
1882
1889
 
1883
1890
/* Line 1455 of yacc.c  */
1884
 
#line 1885 "mp-equation-parser.c"
 
1891
#line 1892 "mp-equation-parser.c"
1885
1892
      default: break;
1886
1893
    }
1887
1894
  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
2100
2107
 
2101
2108
 
2102
2109
/* Line 1675 of yacc.c  */
2103
 
#line 166 "./mp-equation-parser.y"
 
2110
#line 171 "./mp-equation-parser.y"
2104
2111
 
2105
2112