2016-06-07 68 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] ? ; 
...