comparison core/src/luan/impl/LuanParser.java @ 211:284eddd599b1

fix parsing bug git-svn-id: https://luan-java.googlecode.com/svn/trunk@212 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Tue, 08 Jul 2014 19:31:05 +0000
parents 239c8d650028
children 2ed8465a9d62
comparison
equal deleted inserted replaced
210:e84655b4c45e 211:284eddd599b1
186 } 186 }
187 187
188 FnDef Expression() throws ParseException { 188 FnDef Expression() throws ParseException {
189 Spaces(In.NOTHING); 189 Spaces(In.NOTHING);
190 int start = parser.begin(); 190 int start = parser.begin();
191 Expressions expr = Expr(In.NOTHING); 191 Expressions expr = ExprZ(In.NOTHING);
192 if( expr != null && parser.endOfInput() ) { 192 if( expr != null && parser.endOfInput() ) {
193 Stmt stmt = new ReturnStmt( se(start), expr ); 193 Stmt stmt = new ReturnStmt( se(start), expr );
194 return parser.success(newFnDef(start,stmt)); 194 return parser.success(newFnDef(start,stmt));
195 } 195 }
196 return parser.failure(null); 196 return parser.failure(null);
567 return parser.success( new SetStmt( vars.toArray(new Settable[0]), values ) ); 567 return parser.success( new SetStmt( vars.toArray(new Settable[0]), values ) );
568 } 568 }
569 569
570 private Stmt ExpressionsStmt() throws ParseException { 570 private Stmt ExpressionsStmt() throws ParseException {
571 parser.begin(); 571 parser.begin();
572 Expressions exp = Expr(In.NOTHING); 572 Expressions exp = ExprZ(In.NOTHING);
573 if( exp instanceof FnCall || exp instanceof AndExpr || exp instanceof OrExpr ) 573 if( exp instanceof FnCall || exp instanceof AndExpr || exp instanceof OrExpr )
574 return parser.success( new ExpressionsStmt(exp) ); 574 return parser.success( new ExpressionsStmt(exp) );
575 return parser.failure(null); 575 return parser.failure(null);
576 } 576 }
577 577
583 return parser.success( var.settable() ); 583 return parser.success( var.settable() );
584 } 584 }
585 585
586 private Expressions RequiredExpr(In in) throws ParseException { 586 private Expressions RequiredExpr(In in) throws ParseException {
587 parser.begin(); 587 parser.begin();
588 return parser.success(required(Expr(in),"Bad expression")); 588 return parser.success(required(ExprZ(in),"Bad expression"));
589 } 589 }
590 590
591 private Expressions Expr(In in) throws ParseException { 591 private Expressions ExprZ(In in) throws ParseException {
592 parser.begin(); 592 parser.begin();
593 Expressions exp; 593 Expressions exp;
594 return (exp = VarArgs(in)) != null 594 return (exp = VarArgs(in)) != null
595 || (exp = OrExpr(in)) != null 595 || (exp = OrExpr(in)) != null
596 ? parser.success(exp) 596 ? parser.success(exp)
831 return parser.failure(null); 831 return parser.failure(null);
832 In inParens = in.parens(); 832 In inParens = in.parens();
833 Spaces(inParens); 833 Spaces(inParens);
834 List<TableExpr.Field> fields = new ArrayList<TableExpr.Field>(); 834 List<TableExpr.Field> fields = new ArrayList<TableExpr.Field>();
835 List<Expressions> builder = new ArrayList<Expressions>(); 835 List<Expressions> builder = new ArrayList<Expressions>();
836 while( Field(fields,builder,in) && FieldSep(inParens) ); 836 while( Field(fields,builder,inParens) && FieldSep(inParens) );
837 if( !parser.match('}') ) 837 if( !parser.match('}') )
838 throw parser.exception("Expected table element or '}'"); 838 throw parser.exception("Expected table element or '}'");
839 Spaces(in); 839 Spaces(in);
840 return parser.success( new TableExpr( se(start), fields.toArray(new TableExpr.Field[0]), ExpList.build(builder) ) ); 840 return parser.success( new TableExpr( se(start), fields.toArray(new TableExpr.Field[0]), ExpList.build(builder) ) );
841 } 841 }
852 Expr exp = SubExpr(in); 852 Expr exp = SubExpr(in);
853 if( exp==null ) 853 if( exp==null )
854 exp = NameExpr(in); 854 exp = NameExpr(in);
855 if( exp!=null && parser.match('=') ) { 855 if( exp!=null && parser.match('=') ) {
856 Spaces(in); 856 Spaces(in);
857 fields.add( new TableExpr.Field( exp, required(expr(Expr(in))) ) ); 857 fields.add( new TableExpr.Field( exp, required(expr(ExprZ(in))) ) );
858 return parser.success(); 858 return parser.success();
859 } 859 }
860 parser.rollback(); 860 parser.rollback();
861 Expressions exprs = Expr(in); 861 Expressions exprs = ExprZ(in);
862 if( exprs != null ) { 862 if( exprs != null ) {
863 builder.add(exprs); 863 builder.add(exprs);
864 return parser.success(); 864 return parser.success();
865 } 865 }
866 return parser.failure(); 866 return parser.failure();
1040 Expressions exp = TemplateExpressions(in); 1040 Expressions exp = TemplateExpressions(in);
1041 if( exp != null ) { 1041 if( exp != null ) {
1042 builder.add(exp); 1042 builder.add(exp);
1043 return parser.success(); 1043 return parser.success();
1044 } 1044 }
1045 exp = Expr(in); 1045 exp = ExprZ(in);
1046 if( exp==null ) 1046 if( exp==null )
1047 return parser.failure(); 1047 return parser.failure();
1048 builder.add(exp); 1048 builder.add(exp);
1049 while( parser.match(',') ) { 1049 while( parser.match(',') ) {
1050 Spaces(in); 1050 Spaces(in);