comparison core/src/luan/impl/LuanParser.java @ 206:77365c9fdfe4

remove -> operator git-svn-id: https://luan-java.googlecode.com/svn/trunk@207 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Mon, 07 Jul 2014 23:55:52 +0000
parents 99eef1d0e706
children 239c8d650028
comparison
equal deleted inserted replaced
205:3918f92de5fe 206:77365c9fdfe4
871 return var==null ? null : var.expr(); 871 return var==null ? null : var.expr();
872 } 872 }
873 873
874 private Var VarZ(In in) throws ParseException { 874 private Var VarZ(In in) throws ParseException {
875 int start = parser.begin(); 875 int start = parser.begin();
876 Var var = VarStart(in); 876 Var var = VarStart(in,start);
877 if( var==null ) 877 if( var==null )
878 return parser.failure(null); 878 return parser.failure(null);
879 Var var2; 879 Var var2;
880 while( (var2=Var2(in,start,var.expr())) != null ) { 880 while( (var2=Var2(in,start,var.expr())) != null ) {
881 var = var2; 881 var = var2;
882 } 882 }
883 return parser.success(var); 883 return parser.success(var);
884 } 884 }
885 885
886 private Var VarStart(In in,int start) throws ParseException {
887 if( parser.match('(') ) {
888 In inParens = in.parens();
889 Spaces(inParens);
890 Expr exp = expr(RequiredExpr(inParens));
891 RequiredMatch(')');
892 Spaces(in);
893 return exprVar(exp);
894 }
895 String name = Name(in);
896 if( name != null )
897 return nameVar(start,name);
898 Expressions exp;
899 exp = TableExpr(in);
900 if( exp != null )
901 return exprVar(exp);
902 exp = Literal(in);
903 if( exp != null )
904 return exprVar(exp);
905 return null;
906 }
907
886 private Var Var2(In in,int start,Expressions exp1) throws ParseException { 908 private Var Var2(In in,int start,Expressions exp1) throws ParseException {
887 parser.begin();
888 Var var = VarExt(in,start,exp1);
889 if( var != null )
890 return parser.success(var);
891 if( parser.match("->") ) {
892 Spaces(in);
893 List<Expressions> builder = new ArrayList<Expressions>();
894 builder.add(exp1);
895 Expr exp2 = expr(RequiredVarExpB(in));
896 FnCall fnCall = required(Args( in, start, exp2, builder ));
897 return parser.success(exprVar(fnCall));
898 }
899 FnCall fnCall = Args( in, start, expr(exp1), new ArrayList<Expressions>() );
900 if( fnCall != null )
901 return parser.success(exprVar(fnCall));
902 return parser.failure(null);
903 }
904
905 private Expressions RequiredVarExpB(In in) throws ParseException {
906 int start = parser.begin();
907 Var var = required(VarStart(in));
908 Var var2;
909 while( (var2=VarExt(in,start,var.expr())) != null ) {
910 var = var2;
911 }
912 return parser.success(var.expr());
913 }
914
915 private Var VarExt(In in,int start,Expressions exp1) throws ParseException {
916 parser.begin(); 909 parser.begin();
917 Expr exp2 = SubExpr(in); 910 Expr exp2 = SubExpr(in);
918 if( exp2 != null ) 911 if( exp2 != null )
919 return parser.success(indexVar(start,expr(exp1),exp2)); 912 return parser.success(indexVar(start,expr(exp1),exp2));
920 if( parser.match('.') ) { 913 if( parser.match('.') ) {
921 Spaces(in); 914 Spaces(in);
922 exp2 = NameExpr(in); 915 exp2 = NameExpr(in);
923 if( exp2!=null ) 916 if( exp2!=null )
924 return parser.success(indexVar(start,expr(exp1),exp2)); 917 return parser.success(indexVar(start,expr(exp1),exp2));
925 } 918 }
926 return parser.failure(null); 919 FnCall fnCall = Args( in, start, expr(exp1), new ArrayList<Expressions>() );
927 } 920 if( fnCall != null )
928 921 return parser.success(exprVar(fnCall));
929 private Var VarStart(In in) throws ParseException {
930 int start = parser.begin();
931 if( parser.match('(') ) {
932 In inParens = in.parens();
933 Spaces(inParens);
934 Expr exp = expr(RequiredExpr(inParens));
935 RequiredMatch(')');
936 Spaces(in);
937 return parser.success(exprVar(exp));
938 }
939 String name = Name(in);
940 if( name != null )
941 return parser.success(nameVar(start,name));
942 Expressions exp;
943 exp = TableExpr(in);
944 if( exp != null )
945 return parser.success(exprVar(exp));
946 exp = Literal(in);
947 if( exp != null )
948 return parser.success(exprVar(exp));
949 return parser.failure(null); 922 return parser.failure(null);
950 } 923 }
951 924
952 private Expr env() { 925 private Expr env() {
953 int index = stackIndex(_ENV); 926 int index = stackIndex(_ENV);