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