正则表达式中的语法分析器



我需要从这里构建解析try/分析器:

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 
    }
}

问题是从主函数S()函数永远不会被称为 cuz A()函数由于(x | "x+y")*周期而获取所有x令牌B()。例如: xxxxx+yx+yx+yxxxxxy如何解决我的问题并对其进行解析?我做错了什么?

附言对不起英语,TNX引起注意

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

S -> x A
A -> x A
A -> x+y A
A -> xy

依此类推,问题消失了

最新更新