Here is the grammar:
<S>-><X><Y><Z>
<X>->a<X>|a
<Y>->b<Y>|b
<Z>->c<Z>|c
I need to write a parser in this grammar.
and when test S([a,a,b,c,c,c],[]). it should return true. in my code I defined match rule to check list elements.
match(H,[H|T],T).
na(X0,X1):-match(a,X0,X2).
nb(X0,X1):-match(b,X0,X2).
nc(X0,X1):-match(c,X0,X2).
ns(X0,X1):-na(X0,X2),nb(X2,X3),nc(X3,X1).
what is wrong in this code? it give true but when you trace. it does not working.
:- set_prolog_flag(double_quotes, chars).
s --> x, y, z.
x --> "a",x|"a".
y --> "b",y|"b".
z --> "c",z|"c".
Here they are, sorted by length:
?- length(Xs,N),phrase(s, Xs).
Xs = [a,b,c], N = 3
; Xs = [a,a,b,c], N = 4
; Xs = [a,b,b,c], N = 4
; Xs = [a,b,c,c], N = 4
; Xs = [a,a,a,b,c], N = 5
; Xs = [a,a,b,b,c], N = 5
; ... .