Exemple #1
0
        public static void Interactive()
        {
            IN = Console.In;
            OUT = Console.Out;
            ERROR = Console.Error;

            try
            {
                var scope = new Scope();
                var compiler = new Translator();

                for (string line = Line(); line != null; line = Line())
                {
                    Tokenizer tokens = new Tokenizer(new ParseReader(new StringReader(line)));
                    try
                    {
                        Parser parser = new Parser(tokens);
                        try
                        {
                            StmtAST stmt = parser.Stmt();
                            if(parser.Tokens.PeekType() != new EoF())
                                ERROR.WriteLine("WARNING: Ignoring tokens: " + parser.Tokens.PeekToken().GetText());
                            
                            object value = stmt.Translate(compiler).Exec(scope);
                            if(value != null)
                                OUT.WriteLine(value.ToString());
                            
                            OUT.Flush();

                        }
                        catch(InternalStorkNetException e)
                        {
                            OUT.Write("INTERNAL ERROR: " + e.Message + "\n");
                            OUT.Write(e.StackTrace);
                        }
                        catch(StorkNetException e)
                        {
                            OUT.Write("ERROR: " + e.Message + "\n");
                        }
                    }
                    finally
                    {
                        tokens.Close();
                    }
                }
            }
            catch (Exception e)
            {
                OUT.WriteLine(e.StackTrace);
            }
        }