>>879
% Prolog

'変換規則を可能な限り使い、変換できなくなるまで変換の過程を出力'(_ファイル名,_開始要素) :-
  abolish(変換規則/2),
  変換規則ファイルの読み込み(_ファイル名),
  変換規則の変換過程ならび(_開始要素,_変換過程ならび),
  concat_atom(_変換過程ならび,' -> ',S),
  wr('%t\n',[S]),
  fail.
'変換規則を可能な限り使い、変換できなくなるまで変換の過程を出力'(_,_).

変換規則の変換過程ならび(A,[]) :-
  \+(変換規則(A,_)).
変換規則の変換過程ならび(A,[A,B|R]) :-
  変換規則(A,B),
  変換規則の変換過程ならび(B,R).

変換規則ファイルの読み込み(_ファイル) :-
  get_lines(_ファイル,Lines),
  member(_行,Lines),
  split(_行,[' -> ','->'],[A,B]),
  assertz(変換規則(A,B)),
  fail.
変換規則ファイルの読み込み(_).