我需要从这里构建解析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
依此类推,问题消失了