2016-06-07 82 views
1

我想爲語言a^n b^n做一個解析樹。序言解析樹a^n b^n

下面是我嘗試過的,但它只是變成了真正的沒有引用分析樹。

%% a^n, b^n.  ex) s([a,a,b,b],[]). = true 

s --> a,s,b. 
s --> []. 

s(ab(S)) --> a,s(S),s. 
s([]) --> []. 

例如,我想打印ab(ab([]))如果我鍵入s(T,[a,a,b,b],[]).

請幫幫忙!

回答

5

s(ab(S)) --> a,s(S),s.應該s(ab(S)) --> [a],s(S),[b].它會給你正確的結果:

s([]) --> []. 
s(ab(S)) --> [a], s(S), [b]. 

| ?- phrase(s(L), [a,a,b,b]). 

L = ab(ab([])) ? ; 

no 
| ?- phrase(s(ab(ab([]))), L). 

L = [a,a,b,b] 

yes 
| ?- phrase(s(L), T). 

L = [] 
T = [] ? ; 

L = ab([]) 
T = [a,b] ? ; 

L = ab(ab([])) 
T = [a,a,b,b] ? ; 

L = ab(ab(ab([]))) 
T = [a,a,a,b,b,b] ? ; 

L = ab(ab(ab(ab([])))) 
T = [a,a,a,a,b,b,b,b] ? ; 
...