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