Mercurial Hosting > luan
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 { |