public void Visit(Stmts node)
 {
     VisitChildren (node);
 }
        private Stmts Stmts()
        {
            Stmts statements = new Stmts ("stmts", currentToken.Row, currentToken.Column);

            if ((Token.Types)currentToken.Type == Token.Types.Var ||
                (Token.Types)currentToken.Type == Token.Types.Identifier ||
                (Token.Types)currentToken.Type == Token.Types.For ||
                (Token.Types)currentToken.Type == Token.Types.Read ||
                (Token.Types)currentToken.Type == Token.Types.Print ||
                (Token.Types)currentToken.Type == Token.Types.Assert) {
                try {
                    statements.AddChild (Stmt());
                    Match (Token.Types.Semicolon);
                    statements.AddChild (Stmts ());
                    return statements;
                } catch (Error e) {
                    Errors.Add (e);
                    SkipToNextStatement ();
                    return Stmts ();
                }
            } else if ((Token.Types)currentToken.Type == Token.Types.End ||
                       (Token.Types)currentToken.Type == Token.Types.EOS) {
                return statements;
            }

            throw new SyntaxError ("invalid start symbol for statement " + currentToken.Lexeme,
                currentToken.Row, currentToken.Column);
        }