Mercurial Hosting > luan
diff src/luan/CmdLine.java @ 12:9cea1aea5eef
CmdLine can run files
git-svn-id: https://luan-java.googlecode.com/svn/trunk@13 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Fri, 23 Nov 2012 10:37:40 +0000 |
parents | b7d7069fee58 |
children | a7c13c6017f7 |
line wrap: on
line diff
--- a/src/luan/CmdLine.java Thu Nov 22 10:51:56 2012 +0000 +++ b/src/luan/CmdLine.java Fri Nov 23 10:37:40 2012 +0000 @@ -1,39 +1,54 @@ package luan; -import java.util.List; import java.util.Scanner; -import org.parboiled.Parboiled; -import org.parboiled.errors.ErrorUtils; -import org.parboiled.parserunners.ReportingParseRunner; -import org.parboiled.support.ParsingResult; -import luan.interp.Expressions; -import luan.interp.Stmt; -import luan.interp.LuaParser; import luan.lib.BasicLib; public class CmdLine { public static void main(String[] args) throws Exception { - LuaParser parser = Parboiled.createParser(LuaParser.class); LuaState lua = new LuaState(); + BasicLib.register(lua); + boolean interactive = false; + int i = 0; + while( i < args.length ) { + String arg = args[i]; + if( !arg.startsWith("-") ) + break; + if( arg.equals("-i") ) { + interactive = true; + } else { + throw new RuntimeException("invalid option: "+arg); + } + i++; + } + if( i == args.length ) { + interactive = true; + } else { + String file = args[i++]; + try { + LuaFunction fn = BasicLib.loadFile(file); + fn.call(lua); + } catch(LuaException e) { + System.out.println(e.getMessage()); + return; + } + } + if( interactive ) + interactive(lua); + } + + static void interactive(LuaState lua) { while( true ) { System.out.print("> "); String input = new Scanner(System.in).nextLine(); - ParsingResult<?> result = new ReportingParseRunner(parser.Target()).run(input); - if( result.hasErrors() ) { - System.out.println("Parse Errors:\n" + ErrorUtils.printParseErrors(result)); - } else { - Object resultValue = result.resultValue; - if( resultValue instanceof Expressions ) { - Expressions expressions = (Expressions)resultValue; - List vals = expressions.eval(lua); - if( !vals.isEmpty() ) - BasicLib.print( vals.toArray() ); - } else { - Stmt stmt = (Stmt)resultValue; - stmt.eval(lua); - } + try { + LuaFunction fn = BasicLib.load(input); + Object[] rtn = fn.call(lua); + if( rtn.length > 0 ) + BasicLib.print(rtn); + } catch(LuaException e) { + System.out.println(e.getMessage()); } } }