comparison core/src/luan/impl/LuanParser.java @ 604:b73f005f3735 0.13

table constructor now uses end_of_line as a delimiter
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 24 Nov 2015 16:29:27 -0700
parents 0742ac78fa69
children 13b390bfed32
comparison
equal deleted inserted replaced
603:862d6bb8124c 604:b73f005f3735
763 763
764 private Expr TableExpr(In in) throws ParseException { 764 private Expr TableExpr(In in) throws ParseException {
765 int start = parser.begin(); 765 int start = parser.begin();
766 if( !parser.match('{') ) 766 if( !parser.match('{') )
767 return parser.failure(null); 767 return parser.failure(null);
768 In inParens = in.parens(); 768 Spaces(In.NOTHING);
769 Spaces(inParens);
770 List<TableExpr.Field> fields = new ArrayList<TableExpr.Field>(); 769 List<TableExpr.Field> fields = new ArrayList<TableExpr.Field>();
771 List<Expressions> builder = new ArrayList<Expressions>(); 770 List<Expressions> builder = new ArrayList<Expressions>();
772 while( Field(fields,builder,inParens) && FieldSep(inParens) ); 771 Field(fields,builder);
773 Expressions exp = TemplateExpressions(inParens); 772 while( FieldSep() ) {
773 Spaces(In.NOTHING);
774 Field(fields,builder);
775 }
776 Expressions exp = TemplateExpressions(In.NOTHING);
774 if( exp != null ) 777 if( exp != null )
775 builder.add(exp); 778 builder.add(exp);
776 if( !parser.match('}') ) 779 if( !parser.match('}') )
777 throw parser.exception("Expected table element or '}'"); 780 throw parser.exception("Expected table element or '}'");
778 Spaces(in); 781 Spaces(in);
779 return parser.success( new TableExpr( se(start), fields.toArray(new TableExpr.Field[0]), ExpList.build(builder) ) ); 782 return parser.success( new TableExpr( se(start), fields.toArray(new TableExpr.Field[0]), ExpList.build(builder) ) );
780 } 783 }
781 784
782 private boolean FieldSep(In in) throws ParseException { 785 private boolean FieldSep() throws ParseException {
783 if( !parser.anyOf(",;") ) 786 return parser.anyOf(",;") || EndOfLine();
784 return false; 787 }
785 Spaces(in); 788
786 return true; 789 private boolean Field(List<TableExpr.Field> fields,List<Expressions> builder) throws ParseException {
787 } 790 parser.begin();
788 791 Expr exp = SubExpr(In.NOTHING);
789 private boolean Field(List<TableExpr.Field> fields,List<Expressions> builder,In in) throws ParseException {
790 parser.begin();
791 Expr exp = SubExpr(in);
792 if( exp==null ) 792 if( exp==null )
793 exp = NameExpr(in); 793 exp = NameExpr(In.NOTHING);
794 if( exp!=null && parser.match('=') ) { 794 if( exp!=null && parser.match('=') ) {
795 Spaces(in); 795 Spaces(In.NOTHING);
796 fields.add( new TableExpr.Field( exp, required(expr(ExprZ(in))) ) ); 796 fields.add( new TableExpr.Field( exp, required(expr(ExprZ(In.NOTHING))) ) );
797 return parser.success(); 797 return parser.success();
798 } 798 }
799 parser.rollback(); 799 parser.rollback();
800 Expressions exprs = ExprZ(in); 800 Expressions exprs = ExprZ(In.NOTHING);
801 if( exprs != null ) { 801 if( exprs != null ) {
802 builder.add(exprs); 802 builder.add(exprs);
803 return parser.success(); 803 return parser.success();
804 } 804 }
805 return parser.failure(); 805 return parser.failure();
1007 1007
1008 private Expr SubExpr(In in) throws ParseException { 1008 private Expr SubExpr(In in) throws ParseException {
1009 parser.begin(); 1009 parser.begin();
1010 if( !parser.match('[') || parser.test("[") || parser.test("=") ) 1010 if( !parser.match('[') || parser.test("[") || parser.test("=") )
1011 return parser.failure(null); 1011 return parser.failure(null);
1012 In inParens = in.parens(); 1012 Spaces(In.NOTHING);
1013 Spaces(inParens); 1013 Expr exp = expr(RequiredExpr(In.NOTHING));
1014 Expr exp = expr(RequiredExpr(inParens));
1015 RequiredMatch(']'); 1014 RequiredMatch(']');
1016 Spaces(in); 1015 Spaces(in);
1017 return parser.success(exp); 1016 return parser.success(exp);
1018 } 1017 }
1019 1018