comparison src/luan/impl/LuanParser.java @ 1096:5dc601c4ed6d

fix parser errors
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 05 Mar 2017 15:25:23 -0700
parents a656fa45e315
children 46732cc0ab87
comparison
equal deleted inserted replaced
1095:2443152dc2f1 1096:5dc601c4ed6d
1261 return null; 1261 return null;
1262 } 1262 }
1263 1263
1264 private Var nameVar(final String name) { 1264 private Var nameVar(final String name) {
1265 return new Var() { 1265 return new Var() {
1266 private Expr exp = null;
1266 1267
1267 public Expr exp() throws ParseException { 1268 public Expr exp() throws ParseException {
1269 if( exp == null ) {
1270 String sp = parser.sb().toString();
1271 parser.sb().setLength(0);
1272 exp = calcExp();
1273 if( sp.length() > 0 )
1274 exp.add(sp);
1275 }
1276 return exp;
1277 }
1278
1279 private Expr calcExp() throws ParseException {
1268 Sym sym = getSym(name); 1280 Sym sym = getSym(name);
1269 if( sym != null ) 1281 if( sym != null )
1270 return sym.exp(); 1282 return sym.exp();
1271 Expr envExpr = env(); 1283 Expr envExpr = env();
1272 if( envExpr != null ) 1284 if( envExpr != null )
1436 while( NameChar() ); 1448 while( NameChar() );
1437 String match = parser.textFrom(start); 1449 String match = parser.textFrom(start);
1438 if( keywords.contains(match) ) 1450 if( keywords.contains(match) )
1439 return parser.failure(null); 1451 return parser.failure(null);
1440 Spaces(); 1452 Spaces();
1453 parser.upSb();
1441 return parser.success(match); 1454 return parser.success(match);
1442 } 1455 }
1443 1456
1444 private boolean NameChar() { 1457 private boolean NameChar() {
1445 return NameFirstChar() || Digit(); 1458 return NameFirstChar() || Digit();
1917 } 1930 }
1918 1931
1919 } 1932 }
1920 1933
1921 private Expr expString(List<Expr> list) { 1934 private Expr expString(List<Expr> list) {
1922 Expr exp = new Expr(Val.ARRAY,false);
1923 switch(list.size()) { 1935 switch(list.size()) {
1924 case 0: 1936 case 0:
1925 exp.add("LuanFunction.NOTHING"); 1937 {
1926 return exp; 1938 Expr exp = new Expr(Val.ARRAY,false);
1939 exp.add("LuanFunction.NOTHING");
1940 return exp;
1941 }
1927 case 1: 1942 case 1:
1928 return list.get(0); 1943 {
1944 Expr exp = list.get(0);
1945 exp.prependNewLines();
1946 return exp;
1947 }
1929 default: 1948 default:
1930 int lastI = list.size() - 1; 1949 {
1931 exp.add( "new Object[]{" ); 1950 Expr exp = new Expr(Val.ARRAY,false);
1932 for( int i=0; i<lastI; i++ ) { 1951 int lastI = list.size() - 1;
1933 exp.addAll( list.get(i).single() ); 1952 exp.add( "new Object[]{" );
1934 exp.add( "," ); 1953 for( int i=0; i<lastI; i++ ) {
1935 } 1954 exp.addAll( list.get(i).single() );
1936 Expr last = list.get(lastI); 1955 exp.add( "," );
1937 if( last.valType==Val.SINGLE ) { 1956 }
1938 exp.addAll( last ); 1957 Expr last = list.get(lastI);
1939 exp.add( "}" ); 1958 if( last.valType==Val.SINGLE ) {
1940 } else { 1959 exp.addAll( last );
1941 exp.add( "}" ); 1960 exp.add( "}" );
1942 exp.add( 0, "LuanImpl.concatArgs(" ); 1961 } else {
1943 exp.add( "," ); 1962 exp.add( "}" );
1944 exp.addAll( last ); 1963 exp.add( 0, "LuanImpl.concatArgs(" );
1945 exp.add( ")" ); 1964 exp.add( "," );
1946 } 1965 exp.addAll( last );
1947 return exp; 1966 exp.add( ")" );
1967 }
1968 return exp;
1969 }
1948 } 1970 }
1949 } 1971 }
1950 1972
1951 private class Stmts extends ParseList { 1973 private class Stmts extends ParseList {
1952 boolean hasReturn = false; 1974 boolean hasReturn = false;