comparison core/src/luan/impl/LuanParser.java @ 191:2456ef7ada02

minor git-svn-id: https://luan-java.googlecode.com/svn/trunk@192 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Tue, 01 Jul 2014 06:40:48 +0000
parents 04b86428dc50
children 66ed8886abc0
comparison
equal deleted inserted replaced
190:04b86428dc50 191:2456ef7ada02
598 int start = parser.begin(); 598 int start = parser.begin();
599 Expressions exp = AndExpr(in); 599 Expressions exp = AndExpr(in);
600 if( exp==null ) 600 if( exp==null )
601 return parser.failure(null); 601 return parser.failure(null);
602 while( Keyword("or",in) ) { 602 while( Keyword("or",in) ) {
603 exp = new OrExpr( se(start), expr(exp), required(expr(AndExpr(in))) ); 603 Expressions exp2 = AndExpr(in);
604 exp = new OrExpr( se(start), expr(exp), required(expr(exp2)) );
604 } 605 }
605 return parser.success(exp); 606 return parser.success(exp);
606 } 607 }
607 608
608 private Expressions AndExpr(In in) throws ParseException { 609 private Expressions AndExpr(In in) throws ParseException {
609 int start = parser.begin(); 610 int start = parser.begin();
610 Expressions exp = RelExpr(in); 611 Expressions exp = RelExpr(in);
611 if( exp==null ) 612 if( exp==null )
612 return parser.failure(null); 613 return parser.failure(null);
613 while( Keyword("and",in) ) { 614 while( Keyword("and",in) ) {
614 exp = new AndExpr( se(start), expr(exp), required(expr(RelExpr(in))) ); 615 Expressions exp2 = RelExpr(in);
616 exp = new AndExpr( se(start), expr(exp), required(expr(exp2)) );
615 } 617 }
616 return parser.success(exp); 618 return parser.success(exp);
617 } 619 }
618 620
619 private Expressions RelExpr(In in) throws ParseException { 621 private Expressions RelExpr(In in) throws ParseException {
622 if( exp==null ) 624 if( exp==null )
623 return parser.failure(null); 625 return parser.failure(null);
624 while(true) { 626 while(true) {
625 if( parser.match("==") ) { 627 if( parser.match("==") ) {
626 Spaces(in); 628 Spaces(in);
627 exp = new EqExpr( se(start), expr(exp), required(expr(ConcatExpr(in))) ); 629 Expressions exp2 = ConcatExpr(in);
630 exp = new EqExpr( se(start), expr(exp), required(expr(exp2)) );
628 } else if( parser.match("~=") ) { 631 } else if( parser.match("~=") ) {
629 Spaces(in); 632 Spaces(in);
630 exp = new NotExpr( se(start), new EqExpr( se(start), expr(exp), required(expr(ConcatExpr(in))) ) ); 633 Expressions exp2 = ConcatExpr(in);
634 exp = new NotExpr( se(start), new EqExpr( se(start), expr(exp), required(expr(exp2)) ) );
631 } else if( parser.match("<=") ) { 635 } else if( parser.match("<=") ) {
632 Spaces(in); 636 Spaces(in);
633 exp = new LeExpr( se(start), expr(exp), required(expr(ConcatExpr(in))) ); 637 Expressions exp2 = ConcatExpr(in);
638 exp = new LeExpr( se(start), expr(exp), required(expr(exp2)) );
634 } else if( parser.match(">=") ) { 639 } else if( parser.match(">=") ) {
635 Spaces(in); 640 Spaces(in);
636 exp = new LeExpr( se(start), required(expr(ConcatExpr(in))), expr(exp) ); 641 Expressions exp2 = ConcatExpr(in);
642 exp = new LeExpr( se(start), required(expr(exp2)), expr(exp) );
637 } else if( parser.match("<") ) { 643 } else if( parser.match("<") ) {
638 Spaces(in); 644 Spaces(in);
639 exp = new LtExpr( se(start), expr(exp), required(expr(ConcatExpr(in))) ); 645 Expressions exp2 = ConcatExpr(in);
646 exp = new LtExpr( se(start), expr(exp), required(expr(exp2)) );
640 } else if( parser.match(">") ) { 647 } else if( parser.match(">") ) {
641 Spaces(in); 648 Spaces(in);
642 exp = new LtExpr( se(start), required(expr(ConcatExpr(in))), expr(exp) ); 649 Expressions exp2 = ConcatExpr(in);
650 exp = new LtExpr( se(start), required(expr(exp2)), expr(exp) );
643 } else 651 } else
644 break; 652 break;
645 } 653 }
646 return parser.success(exp); 654 return parser.success(exp);
647 } 655 }
651 Expressions exp = SumExpr(in); 659 Expressions exp = SumExpr(in);
652 if( exp==null ) 660 if( exp==null )
653 return parser.failure(null); 661 return parser.failure(null);
654 if( parser.match("..") ) { 662 if( parser.match("..") ) {
655 Spaces(in); 663 Spaces(in);
656 exp = new ConcatExpr( se(start), expr(exp), required(expr(ConcatExpr(in))) ); 664 Expressions exp2 = ConcatExpr(in);
665 exp = new ConcatExpr( se(start), expr(exp), required(expr(exp2)) );
657 } 666 }
658 return parser.success(exp); 667 return parser.success(exp);
659 } 668 }
660 669
661 private Expressions SumExpr(In in) throws ParseException { 670 private Expressions SumExpr(In in) throws ParseException {
664 if( exp==null ) 673 if( exp==null )
665 return parser.failure(null); 674 return parser.failure(null);
666 while(true) { 675 while(true) {
667 if( parser.match('+') ) { 676 if( parser.match('+') ) {
668 Spaces(in); 677 Spaces(in);
669 exp = new AddExpr( se(start), expr(exp), required(expr(TermExpr(in))) ); 678 Expressions exp2 = TermExpr(in);
679 exp = new AddExpr( se(start), expr(exp), required(expr(exp2)) );
670 } else if( Minus() ) { 680 } else if( Minus() ) {
671 Spaces(in); 681 Spaces(in);
672 exp = new SubExpr( se(start), expr(exp), required(expr(TermExpr(in))) ); 682 Expressions exp2 = TermExpr(in);
683 exp = new SubExpr( se(start), expr(exp), required(expr(exp2)) );
673 } else 684 } else
674 break; 685 break;
675 } 686 }
676 return parser.success(exp); 687 return parser.success(exp);
677 } 688 }
687 if( exp==null ) 698 if( exp==null )
688 return parser.failure(null); 699 return parser.failure(null);
689 while(true) { 700 while(true) {
690 if( parser.match('*') ) { 701 if( parser.match('*') ) {
691 Spaces(in); 702 Spaces(in);
692 exp = new MulExpr( se(start), expr(exp), required(expr(UnaryExpr(in))) ); 703 Expressions exp2 = UnaryExpr(in);
704 exp = new MulExpr( se(start), expr(exp), required(expr(exp2)) );
693 } else if( parser.match('/') ) { 705 } else if( parser.match('/') ) {
694 Spaces(in); 706 Spaces(in);
695 exp = new DivExpr( se(start), expr(exp), required(expr(UnaryExpr(in))) ); 707 Expressions exp2 = UnaryExpr(in);
708 exp = new DivExpr( se(start), expr(exp), required(expr(exp2)) );
696 } else if( Mod() ) { 709 } else if( Mod() ) {
697 Spaces(in); 710 Spaces(in);
698 exp = new ModExpr( se(start), expr(exp), required(expr(UnaryExpr(in))) ); 711 Expressions exp2 = UnaryExpr(in);
712 exp = new ModExpr( se(start), expr(exp), required(expr(exp2)) );
699 } else 713 } else
700 break; 714 break;
701 } 715 }
702 return parser.success(exp); 716 return parser.success(exp);
703 } 717 }
709 723
710 private Expressions UnaryExpr(In in) throws ParseException { 724 private Expressions UnaryExpr(In in) throws ParseException {
711 int start = parser.begin(); 725 int start = parser.begin();
712 if( parser.match('#') ) { 726 if( parser.match('#') ) {
713 Spaces(in); 727 Spaces(in);
714 return parser.success( new LenExpr( se(start), required(expr(UnaryExpr(in))) ) ); 728 Expressions exp = UnaryExpr(in);
729 return parser.success( new LenExpr( se(start), required(expr(exp)) ) );
715 } 730 }
716 if( Minus() ) { 731 if( Minus() ) {
717 Spaces(in); 732 Spaces(in);
718 return parser.success( new UnmExpr( se(start), required(expr(UnaryExpr(in))) ) ); 733 Expressions exp = UnaryExpr(in);
734 return parser.success( new UnmExpr( se(start), required(expr(exp)) ) );
719 } 735 }
720 if( Keyword("not",in) ) { 736 if( Keyword("not",in) ) {
721 Spaces(in); 737 Spaces(in);
722 return parser.success( new NotExpr( se(start), required(expr(UnaryExpr(in))) ) ); 738 Expressions exp = UnaryExpr(in);
739 return parser.success( new NotExpr( se(start), required(expr(exp)) ) );
723 } 740 }
724 Expressions exp = PowExpr(in); 741 Expressions exp = PowExpr(in);
725 if( exp==null ) 742 if( exp==null )
726 return parser.failure(null); 743 return parser.failure(null);
727 return parser.success(exp); 744 return parser.success(exp);
732 Expressions exp = SingleExpr(in); 749 Expressions exp = SingleExpr(in);
733 if( exp==null ) 750 if( exp==null )
734 return parser.failure(null); 751 return parser.failure(null);
735 if( parser.match('^') ) { 752 if( parser.match('^') ) {
736 Spaces(in); 753 Spaces(in);
737 exp = new ConcatExpr( se(start), expr(exp), required(expr(PowExpr(in))) ); 754 Expressions exp2 = PowExpr(in);
755 exp = new ConcatExpr( se(start), expr(exp), required(expr(exp2)) );
738 } 756 }
739 return parser.success(exp); 757 return parser.success(exp);
740 } 758 }
741 759
742 private Expressions SingleExpr(In in) throws ParseException { 760 private Expressions SingleExpr(In in) throws ParseException {