0
我需要從這個建立解析嘗試/分析儀:句法分析器
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()
函數永遠不會被稱爲cuz A()
函數由於(x | "x+y")*
週期而獲取所有x
標記。例如: xxxxx+yx+yx+yxxxxxy
如何解決我的問題並解析它? 我在做什麼錯?
p.s.遺憾的英語,TNX注意力
您正則表達式'X(X | 「X + Y」)* X + y'與正則表達式'x(x |「x + y」)* xy'相等,因爲除了最後一個x以外的每一個x都可以被kleene星吃掉。 – user1937198
它是,但問題仍然存在,'A()'函數獲取所有'x'標記,當執行'if(標記=='x')...'表達式將是錯誤的 –