如何运行这部分代码?

时间:2016-02-12 01:31:47

标签: java interpreter

我在堆栈上找到了这段代码,我想在我的机器上试用它,但它一直给我一个错误

在Main类中找不到主要方法,请将主方法定义为:    public static void main(String [] args) 或者JavaFX应用程序类必须扩展javafx.application.Application

谁能帮我弄清楚怎么办? 这是我想在我的机器上试用的代码部分

public static void main(String[] args) {

}
public int parse(String input) {
        Scanner scanner = new Scanner(input);

            return consumeLine(scanner);
        }

        public int consumeLine(Scanner scanner) {
            if( scanner.hasNext("(") ) {
                return consumeExpression(scanner);

            } else if( scanner.hasNext("IF") ) {
                return consumeIf(scanner);
            }
            return 0;
        }


        public int consumeExpression(Scanner scanner) {
            scanner.next("(");
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            String op = scanner.next("[+-/*]");
            scanner.next(")");

            if( "+".equals(op) ) {
                return a + b;

            } else if( "-".equals(op) ) {
                return a - b;
            } 

            throw new RuntimeException("parsing error");
        }

        public int consumeIf(Scanner scanner) {
            scanner.next("IF");
            int exp1 = consumeExpression(scanner);
            int exp2 = consumeExpression(scanner);
            int exp3 = consumeExpression(scanner);
            int exp4 = consumeExpression(scanner);

            if( exp1 < 0 ) {
                return exp2;
            } else if( exp1 == 0 ) {
                return exp3;
            } 

            throw new RuntimeException("should not be here (TM)");
        }

1 个答案:

答案 0 :(得分:0)

试试这个。

    public int parse(String input) {
        Scanner scanner = new Scanner(input);
        return consumeLine(scanner);
    }

    public int consumeLine(Scanner scanner) {
        if( scanner.hasNext("\\(") ) {
            return consumeExpression(scanner);
        } else if( scanner.hasNext("IF") ) {
            return consumeIf(scanner);
        }
        return 0;
    }


    public int consumeExpression(Scanner scanner) {
        scanner.next("\\(");
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        String op = scanner.next("[+-/*]");
        scanner.next("\\)");

        if( "+".equals(op) ) {
            return a + b;

        } else if( "-".equals(op) ) {
            return a - b;
        } 

        throw new RuntimeException("parsing error");
    }

    public int consumeIf(Scanner scanner) {
        scanner.next("IF");
        int exp1 = consumeExpression(scanner);
        int exp2 = consumeExpression(scanner);
        int exp3 = consumeExpression(scanner);
        int exp4 = consumeExpression(scanner);

        if( exp1 < 0 ) {
            return exp2;
        } else if( exp1 == 0 ) {
            return exp3;
        } 

        throw new RuntimeException("should not be here (TM)");
    } 

示例输出

System.out.println(parse(" IF ( 0 0 - ) ( 1 1 + ) ( 2 2 + ) ( 3 3 + )"));
// -> 4