Changeset 922e4d in git
- Timestamp:
- Mar 21, 1997, 3:15:22 PM (27 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 9c7667c132e7a9924e9e92fb80f4ca2d6cd4dd0a
- Parents:
- 4f568c15ac592b67d6d689c797d299502aebc194
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/grammar.y
r4f568c r922e4d 3 3 ****************************************/ 4 4 /* $Log: not supported by cvs2svn $ 5 * Revision 1.1.1.1 1997/03/19 13:18:55 obachman 6 * Imported Singular sources 7 * 5 8 */ 6 9 … … 255 258 %token <i> SYSVAR 256 259 257 %type <i> intexpr258 259 260 %type <name> extendedid 260 261 %type <lv> rlist ordering OrderingList orderelem … … 468 469 $2.CleanUp(); 469 470 } 470 | intexpr471 | INT_CONST 471 472 { 472 473 memset(&$$,0,sizeof($$)); 473 $$.rtyp = INT_CMD; 474 $$.data = (void *)$1; 475 } 476 | SYSVAR 477 { 478 memset(&$$,0,sizeof($$)); 479 $$.rtyp = $1; 480 $$.data = $$.Data(); 481 } 482 | stringexpr 483 { 484 memset(&$$,0,sizeof($$)); 485 $$.rtyp = STRING_CMD; 486 $$.data = $1; 487 } 488 ; 489 490 exprlist: 491 expr ',' exprlist 492 { 493 leftv v = &$1; 494 while (v->next!=NULL) 495 { 496 v=v->next; 497 } 498 v->next = (leftv)Alloc(sizeof(sleftv)); 499 memcpy(v->next,&($3),sizeof(sleftv)); 500 $$ = $1; 501 } 502 | expr 503 { 504 $$ = $1; 505 } 506 | '(' expr ',' exprlist ')' 507 { 508 leftv v = &$2; 509 while (v->next!=NULL) 510 { 511 v=v->next; 512 } 513 v->next = (leftv)Alloc(sizeof(sleftv)); 514 memcpy(v->next,&($4),sizeof(sleftv)); 515 $$ = $2; 516 } 517 ; 518 519 expr: expr_arithmetic 520 { 521 /*if ($1.typ == eunknown) YYERROR;*/ 522 $$ = $1; 523 } 524 | elemexpr { $$ = $1; } 525 | '(' expr ')' { $$ = $2; } 526 | expr '[' expr ',' expr ']' 527 { 528 if(iiExprArith3(&$$,'[',&$1,&$3,&$5)) YYERROR; 529 } 530 | expr '[' expr ']' 531 { 532 if(iiExprArith2(&$$,&$1,'[',&$3)) YYERROR; 533 } 534 | ROOT_DECL '(' expr ')' 535 { 536 if(iiExprArith1(&$$,&$3,$1)) YYERROR; 537 } 538 | ROOT_DECL_LIST '(' exprlist ')' 539 { 540 if(iiExprArithM(&$$,&$3,$1)) YYERROR; 541 } 542 | ROOT_DECL_LIST '(' ')' 543 { 544 if(iiExprArithM(&$$,NULL,$1)) YYERROR; 545 } 546 | RING_DECL '(' expr ')' 547 { 548 if(iiExprArith1(&$$,&$3,$1)) YYERROR; 549 } 550 | currring_lists '(' exprlist ')' 551 { 552 if(iiExprArithM(&$$,&$3,$1)) YYERROR; 553 } 554 | currring_lists '(' ')' 555 { 556 if(iiExprArithM(&$$,NULL,$1)) YYERROR; 557 } 558 | CMD_1 '(' expr ')' 559 { 560 if(iiExprArith1(&$$,&$3,$1)) YYERROR; 561 } 562 | CMD_2 '(' expr ',' expr ')' 563 { 564 if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR; 565 } 566 | CMD_3 '(' expr ',' expr ',' expr ')' 567 { 568 if(iiExprArith3(&$$,$1,&$3,&$5,&$7)) YYERROR; 569 } 570 | CMD_M '(' ')' 571 { 572 if(iiExprArithM(&$$,NULL,$1)) YYERROR; 573 } 574 | CMD_23 '(' expr ',' expr ')' 575 { 576 if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR; 577 } 578 | CMD_23 '(' expr ',' expr ',' expr ')' 579 { 580 if(iiExprArith3(&$$,$1,&$3,&$5,&$7)) YYERROR; 581 } 582 | CMD_12 '(' expr ')' 583 { 584 if(iiExprArith1(&$$,&$3,$1)) YYERROR; 585 } 586 | CMD_12 '(' expr ',' expr ')' 587 { 588 if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR; 589 } 590 | CMD_123 '(' expr ')' 591 { 592 if(iiExprArith1(&$$,&$3,$1)) YYERROR; 593 } 594 | CMD_123 '(' expr ',' expr ')' 595 { 596 if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR; 597 } 598 | CMD_123 '(' expr ',' expr ',' expr ')' 599 { 600 if(iiExprArith3(&$$,$1,&$3,&$5,&$7)) YYERROR; 601 } 602 | MATRIX_CMD '(' expr ',' expr ',' expr ')' 603 { 604 if(iiExprArith3(&$$,MATRIX_CMD,&$3,&$5,&$7)) YYERROR; 605 } 606 | MATRIX_CMD '(' expr ')' 607 { 608 if(iiExprArith1(&$$,&$3,MATRIX_CMD)) YYERROR; 609 } 610 | INTMAT_CMD '(' expr ')' 611 { 612 if(iiExprArith1(&$$,&$3,INTMAT_CMD)) YYERROR; 613 } 614 | CMD_M '(' exprlist ')' 615 { 616 if(iiExprArithM(&$$,&$3,$1)) YYERROR; 617 } 618 | quote_start expr quote_end 619 { 620 $$=$2; 621 } 622 | quote_start expr '=' expr quote_end 623 { 624 #ifdef SIQ 625 siq++; 626 if (siq>0) 627 { if (iiExprArith2(&$$,&$2,'=',&$4)) YYERROR; } 628 else 629 #endif 630 { 631 memset(&$$,0,sizeof($$)); 632 $$.rtyp=NONE; 633 if (iiAssign(&$2,&$4)) YYERROR; 634 } 635 #ifdef SIQ 636 siq--; 637 #endif 638 } 639 | EVAL '(' 640 { 641 #ifdef SIQ 642 siq--; 643 #endif 644 } 645 expr ')' 646 { 647 #ifdef SIQ 648 if (siq<=0) $4.Eval(); 649 #endif 650 $$=$4; 651 #ifdef SIQ 652 siq++; 653 #endif 654 } 655 ; 656 657 quote_start: QUOTE '(' 658 { 659 #ifdef SIQ 660 siq++; 661 #endif 662 } 663 ; 664 665 quote_end: ')' 666 { 667 #ifdef SIQ 668 siq--; 669 #endif 670 } 671 ; 672 673 expr_arithmetic: 674 expr PLUSPLUS %prec PLUSPLUS 675 { 676 if(iiExprArith1(&$$,&$1,PLUSPLUS)) YYERROR; 677 } 678 | expr MINUSMINUS %prec MINUSMINUS 679 { 680 if(iiExprArith1(&$$,&$1,MINUSMINUS)) YYERROR; 681 } 682 | expr '+' expr 683 { 684 if(iiExprArith2(&$$,&$1,'+',&$3)) YYERROR; 685 } 686 | expr '-' expr 687 { 688 if(iiExprArith2(&$$,&$1,'-',&$3)) YYERROR; 689 } 690 | expr '*' expr 691 { 692 if(iiExprArith2(&$$,&$1,'*',&$3)) YYERROR; 693 } 694 | expr '/' expr 695 { 696 if(iiExprArith2(&$$,&$1,'/',&$3)) YYERROR; 697 } 698 | expr '^' expr 699 { 700 if(iiExprArith2(&$$,&$1,'^',&$3)) YYERROR; 701 } 702 | expr '%' expr 703 { 704 if(iiExprArith2(&$$,&$1,'%',&$3)) YYERROR; 705 } 706 | expr '>' expr 707 { 708 if(iiExprArith2(&$$,&$1,'>',&$3)) YYERROR; 709 } 710 | expr '<' expr 711 { 712 if(iiExprArith2(&$$,&$1,'<',&$3)) YYERROR; 713 } 714 | expr '&' expr 715 { 716 if(iiExprArith2(&$$,&$1,'&',&$3)) YYERROR; 717 } 718 | expr '|' expr 719 { 720 if(iiExprArith2(&$$,&$1,'|',&$3)) YYERROR; 721 } 722 | expr NOTEQUAL expr 723 { 724 if(iiExprArith2(&$$,&$1,NOTEQUAL,&$3)) YYERROR; 725 } 726 | expr EQUAL_EQUAL expr 727 { 728 if(iiExprArith2(&$$,&$1,EQUAL_EQUAL,&$3)) YYERROR; 729 } 730 | expr GE expr 731 { 732 if(iiExprArith2(&$$,&$1,GE,&$3)) YYERROR; 733 } 734 | expr LE expr 735 { 736 if(iiExprArith2(&$$,&$1,LE,&$3)) YYERROR; 737 } 738 | expr DOTDOT expr 739 { 740 if(iiExprArith2(&$$,&$1,DOTDOT,&$3)) YYERROR; 741 } 742 | NOT '(' expr ')' 743 { 744 memset(&$$,0,sizeof($$)); 745 int i; TESTSETINT($3,i); 746 $$.rtyp = INT_CMD; 747 $$.data = (void *)(i == 0 ? 1 : 0); 748 } 749 | '-' expr %prec UMINUS 750 { 751 if(iiExprArith1(&$$,&$2,'-')) YYERROR; 752 } 753 ; 754 755 left_value: 756 declare_ip_variable cmdeq { $$ = $1; } 757 | exprlist '=' { $$ = $1; } 758 ; 759 760 intexpr: 761 INT_CONST 762 { 763 $$ = atoi($1); 474 int i = atoi($1); 764 475 765 476 /* check: out of range input */ … … 768 479 { 769 480 char tmp[100]; 770 sprintf(tmp,"%d", $$);771 if (strcmp(tmp,$1) )481 sprintf(tmp,"%d",i); 482 if (strcmp(tmp,$1)!=0) 772 483 { 773 484 Werror("`%s` greater than %d(max. integer representation)" … … 778 489 /*remember not to FreeL($1) 779 490 *because it is a part of the scanner buffer*/ 780 } 781 ; 491 $$.rtyp = INT_CMD; 492 $$.data = (void *)i; 493 } 494 | SYSVAR 495 { 496 memset(&$$,0,sizeof($$)); 497 $$.rtyp = $1; 498 $$.data = $$.Data(); 499 } 500 | stringexpr 501 { 502 memset(&$$,0,sizeof($$)); 503 $$.rtyp = STRING_CMD; 504 $$.data = $1; 505 } 506 ; 507 508 exprlist: 509 expr ',' exprlist 510 { 511 leftv v = &$1; 512 while (v->next!=NULL) 513 { 514 v=v->next; 515 } 516 v->next = (leftv)Alloc(sizeof(sleftv)); 517 memcpy(v->next,&($3),sizeof(sleftv)); 518 $$ = $1; 519 } 520 | expr 521 { 522 $$ = $1; 523 } 524 | '(' expr ',' exprlist ')' 525 { 526 leftv v = &$2; 527 while (v->next!=NULL) 528 { 529 v=v->next; 530 } 531 v->next = (leftv)Alloc(sizeof(sleftv)); 532 memcpy(v->next,&($4),sizeof(sleftv)); 533 $$ = $2; 534 } 535 ; 536 537 expr: expr_arithmetic 538 { 539 /*if ($1.typ == eunknown) YYERROR;*/ 540 $$ = $1; 541 } 542 | elemexpr { $$ = $1; } 543 | '(' expr ')' { $$ = $2; } 544 | expr '[' expr ',' expr ']' 545 { 546 if(iiExprArith3(&$$,'[',&$1,&$3,&$5)) YYERROR; 547 } 548 | expr '[' expr ']' 549 { 550 if(iiExprArith2(&$$,&$1,'[',&$3)) YYERROR; 551 } 552 | ROOT_DECL '(' expr ')' 553 { 554 if(iiExprArith1(&$$,&$3,$1)) YYERROR; 555 } 556 | ROOT_DECL_LIST '(' exprlist ')' 557 { 558 if(iiExprArithM(&$$,&$3,$1)) YYERROR; 559 } 560 | ROOT_DECL_LIST '(' ')' 561 { 562 if(iiExprArithM(&$$,NULL,$1)) YYERROR; 563 } 564 | RING_DECL '(' expr ')' 565 { 566 if(iiExprArith1(&$$,&$3,$1)) YYERROR; 567 } 568 | currring_lists '(' exprlist ')' 569 { 570 if(iiExprArithM(&$$,&$3,$1)) YYERROR; 571 } 572 | currring_lists '(' ')' 573 { 574 if(iiExprArithM(&$$,NULL,$1)) YYERROR; 575 } 576 | CMD_1 '(' expr ')' 577 { 578 if(iiExprArith1(&$$,&$3,$1)) YYERROR; 579 } 580 | CMD_2 '(' expr ',' expr ')' 581 { 582 if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR; 583 } 584 | CMD_3 '(' expr ',' expr ',' expr ')' 585 { 586 if(iiExprArith3(&$$,$1,&$3,&$5,&$7)) YYERROR; 587 } 588 | CMD_M '(' ')' 589 { 590 if(iiExprArithM(&$$,NULL,$1)) YYERROR; 591 } 592 | CMD_23 '(' expr ',' expr ')' 593 { 594 if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR; 595 } 596 | CMD_23 '(' expr ',' expr ',' expr ')' 597 { 598 if(iiExprArith3(&$$,$1,&$3,&$5,&$7)) YYERROR; 599 } 600 | CMD_12 '(' expr ')' 601 { 602 if(iiExprArith1(&$$,&$3,$1)) YYERROR; 603 } 604 | CMD_12 '(' expr ',' expr ')' 605 { 606 if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR; 607 } 608 | CMD_123 '(' expr ')' 609 { 610 if(iiExprArith1(&$$,&$3,$1)) YYERROR; 611 } 612 | CMD_123 '(' expr ',' expr ')' 613 { 614 if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR; 615 } 616 | CMD_123 '(' expr ',' expr ',' expr ')' 617 { 618 if(iiExprArith3(&$$,$1,&$3,&$5,&$7)) YYERROR; 619 } 620 | MATRIX_CMD '(' expr ',' expr ',' expr ')' 621 { 622 if(iiExprArith3(&$$,MATRIX_CMD,&$3,&$5,&$7)) YYERROR; 623 } 624 | MATRIX_CMD '(' expr ')' 625 { 626 if(iiExprArith1(&$$,&$3,MATRIX_CMD)) YYERROR; 627 } 628 | INTMAT_CMD '(' expr ')' 629 { 630 if(iiExprArith1(&$$,&$3,INTMAT_CMD)) YYERROR; 631 } 632 | CMD_M '(' exprlist ')' 633 { 634 if(iiExprArithM(&$$,&$3,$1)) YYERROR; 635 } 636 | quote_start expr quote_end 637 { 638 $$=$2; 639 } 640 | quote_start expr '=' expr quote_end 641 { 642 #ifdef SIQ 643 siq++; 644 if (siq>0) 645 { if (iiExprArith2(&$$,&$2,'=',&$4)) YYERROR; } 646 else 647 #endif 648 { 649 memset(&$$,0,sizeof($$)); 650 $$.rtyp=NONE; 651 if (iiAssign(&$2,&$4)) YYERROR; 652 } 653 #ifdef SIQ 654 siq--; 655 #endif 656 } 657 | EVAL '(' 658 { 659 #ifdef SIQ 660 siq--; 661 #endif 662 } 663 expr ')' 664 { 665 #ifdef SIQ 666 if (siq<=0) $4.Eval(); 667 #endif 668 $$=$4; 669 #ifdef SIQ 670 siq++; 671 #endif 672 } 673 ; 674 675 quote_start: QUOTE '(' 676 { 677 #ifdef SIQ 678 siq++; 679 #endif 680 } 681 ; 682 683 quote_end: ')' 684 { 685 #ifdef SIQ 686 siq--; 687 #endif 688 } 689 ; 690 691 expr_arithmetic: 692 expr PLUSPLUS %prec PLUSPLUS 693 { 694 if(iiExprArith1(&$$,&$1,PLUSPLUS)) YYERROR; 695 } 696 | expr MINUSMINUS %prec MINUSMINUS 697 { 698 if(iiExprArith1(&$$,&$1,MINUSMINUS)) YYERROR; 699 } 700 | expr '+' expr 701 { 702 if(iiExprArith2(&$$,&$1,'+',&$3)) YYERROR; 703 } 704 | expr '-' expr 705 { 706 if(iiExprArith2(&$$,&$1,'-',&$3)) YYERROR; 707 } 708 | expr '*' expr 709 { 710 if(iiExprArith2(&$$,&$1,'*',&$3)) YYERROR; 711 } 712 | expr '/' expr 713 { 714 if(iiExprArith2(&$$,&$1,'/',&$3)) YYERROR; 715 } 716 | expr '^' expr 717 { 718 if(iiExprArith2(&$$,&$1,'^',&$3)) YYERROR; 719 } 720 | expr '%' expr 721 { 722 if(iiExprArith2(&$$,&$1,'%',&$3)) YYERROR; 723 } 724 | expr '>' expr 725 { 726 if(iiExprArith2(&$$,&$1,'>',&$3)) YYERROR; 727 } 728 | expr '<' expr 729 { 730 if(iiExprArith2(&$$,&$1,'<',&$3)) YYERROR; 731 } 732 | expr '&' expr 733 { 734 if(iiExprArith2(&$$,&$1,'&',&$3)) YYERROR; 735 } 736 | expr '|' expr 737 { 738 if(iiExprArith2(&$$,&$1,'|',&$3)) YYERROR; 739 } 740 | expr NOTEQUAL expr 741 { 742 if(iiExprArith2(&$$,&$1,NOTEQUAL,&$3)) YYERROR; 743 } 744 | expr EQUAL_EQUAL expr 745 { 746 if(iiExprArith2(&$$,&$1,EQUAL_EQUAL,&$3)) YYERROR; 747 } 748 | expr GE expr 749 { 750 if(iiExprArith2(&$$,&$1,GE,&$3)) YYERROR; 751 } 752 | expr LE expr 753 { 754 if(iiExprArith2(&$$,&$1,LE,&$3)) YYERROR; 755 } 756 | expr DOTDOT expr 757 { 758 if(iiExprArith2(&$$,&$1,DOTDOT,&$3)) YYERROR; 759 } 760 | NOT '(' expr ')' 761 { 762 memset(&$$,0,sizeof($$)); 763 int i; TESTSETINT($3,i); 764 $$.rtyp = INT_CMD; 765 $$.data = (void *)(i == 0 ? 1 : 0); 766 } 767 | '-' expr %prec UMINUS 768 { 769 if(iiExprArith1(&$$,&$2,'-')) YYERROR; 770 } 771 ; 772 773 left_value: 774 declare_ip_variable cmdeq { $$ = $1; } 775 | exprlist '=' { $$ = $1; } 776 ; 777 782 778 783 779 extendedid:
Note: See TracChangeset
for help on using the changeset viewer.