parse(Atoms) :-
        start_symbol(S),
        parse(S,Atoms,[]).
parse(A,I,J) :-
        (A ---> B),  % A ist SynCat mit einer Regel
        tupleToList(B,Bs),
        parse_list(Bs,I,J).
parse(A,I,J) :-      % A ist LexCat 
        I = [W|J],
        ( word(W,A)  % eines Worts im Lexikon
        ; A = [W] ). % oder in einer Regel
tupleToList((B,C),[B|Cs]) :- !, tupleToList(C,Cs).
tupleToList([],[]).
tupleToList([W],[[W]]).
tupleToList(B,[B]).
parse_list([B|Bs],I,J) :-
        parse(B,I,K), parse_list(Bs,K,J).
parse_list([],I,J) :- I = J.

