正则表达式

时间:2017-04-09 13:20:20

标签: regex parsing syntax grammar analysis

我需要从中构建解析try / analyzer:

x (x | "x+y")* x+ y

现在我有语法:

S -> x A x B y
A -> x A
A -> x+y A
A -> epsilon
B -> x B
B -> epsilon

代码如此:

S() {
    if (token == 'x') {
        A();
        if (token == 'x') {
            B();
            if (token == 'y') {
                // success
            } else {
                // syntax err
            }
        } else {
            // syntax err
        }
    } else {
        // syntax err
    }
}

A() {
    if (token == 'x') {
        if (token == '+') {
            if (token == 'y') {
                A();
            } else {
                // syntax err
            }
        } else {
            A();
        }
    } else { 
        // epsilon 
    }
}

B() {
    if (token == 'x') {
        B();
    } else { 
        // epsilon 
    }
}

问题是来自主B()函数的S()永远不会被调用因为A()周期,x函数获取所有(x | "x+y")*令牌。例如: xxxxx+yx+yx+yxxxxxy 我怎样才能解决问题并解析它? 我做错了什么?

P.S。抱歉英语,tnx注意

1 个答案:

答案 0 :(得分:0)

我想解决方案就是这个语法:

    try {

        System.out.println("given:");

        Connection con = DriverManager.getConnection(Main.host, Main.uName, Main.uPass);

        Statement stmt = con.createStatement();
        String u = "SELECT `like_user_id`, COUNT(`like_user_id`) as count FROM `xf_liked_content`";
        ResultSet rs = stmt.executeQuery(u);

        while (rs.next()) {
            String count = rs.getString("count");
            String user_id = rs.getString("like_user_id");
            System.out.println(user_id + "|" + count);
        }
    }

    catch (SQLException err) {
        System.out.println(err.getMessage());
    }

所以,问题就消失了