public static void main(String[] args){
        HashMap<String, Command> cmds = new HashMap<String, Command>();
        cmds.put("ADD", new Add());
        cmds.put("DEF", new Define());
        cmds.put("DIV", new Div());
        cmds.put("MUL", new Mul());
        cmds.put("POP", new Pop());
        cmds.put("PRN", new Print());
        cmds.put("PSH", new Push());
        cmds.put("SQR", new Sqrt());
        cmds.put("SUB", new Sub());

        boolean isInteractive = false;//флаг для интерактивной подсказки
        if (args.length > 0){
            try {
                input = new Scanner(new FileInputStream(args[0]));
                System.out.println("Обрабатывается файл " + args[0]);
            } catch (FileNotFoundException e) {
                System.out.println("Файл не найден.");
                System.exit(1);
            }
        } else {
            isInteractive = true;
            input = new Scanner(System.in);
            System.out.println("Введите команды, завершая каждую нажатием <Enter>.\nВведите пустую строку для завершения работы.");
            System.out.print(">>> ");
        }

        Stack<Double> stack = new Stack<Double>();
        HashMap<String, Double> vars = new HashMap<String, Double>();
        while (input.hasNextLine()){
            //приглашение, если вводим команды с клавиатуры
            if (isInteractive){
                System.out.print(">>> ");
            }

            String cmd = input.nextLine();
            String[] splitCmd = cmd.split(" ");
            //Если в строке содержится комментарий
            if (splitCmd[0].startsWith("#")){
                continue;
            }
            try {
                cmds.get(splitCmd[0].toUpperCase()).execute(stack, vars, splitCmd);
            } catch (NullPointerException e){
                System.out.println("Программа завершена");
                System.exit(0);
            }
        }
        System.out.println("Программа завершена");
    }