function T=reecriture(S,n,axiomes,regles)
% REECRITURE(S,N,AXIOMES,REGLES) réécriture de chaînes.
%
% La fonction REECRITURE(S,N,AXIOMES,REGLES) permet de réécrire
% automatiquement une chaîne initiale donnée par S en N étapes.
% AXIOMES sont les axiomes et REGLES sont les règles de construction
% des chaînes. AXIOMES ne comporte qu'une seule lettre par ligne.
%
% Exemple: 	S='A';
%			Axiomes=['A';'B';'C';'D'];
%			Regles =str2mat(...
%					'B-F+CFC+F-D&F^D-F+&&CFC+F+B//',...
%                   'A&F^CFB^F^D^^-F-D^|F^B|FC^F^A//',...
%                   '|D^|F^B-F+C^F^A&&FA&F^C+F+B^F^D//',...
%                   '|CFB-F+B|FA&F^A&&FB-F+B|FC//');
%			T=reecriture(S,2,Axiomes,Regles);

% J.-B. Roux, Collège de Saussure, 1996.

% Validation
[nba,nc]=size(axiomes);		%nba=nombre d'axiomes
if nc~=1
	error('Une seule lettre par ligne pour les axiomes');
end
[nbr,nc]=size(regles);		%nbr=nombre de règles
if nba~=nbr
	error('Nombre de règles différent du nombre d''axiomes');
end

% Initialisation
T=[];			% chaîne finale vide
for i=0:n		% nombre d'étapes
	for j=1:length(S)
		k=find(S(j)==axiomes);
		if ~isempty(k)			% c'est un axiome
			T=[T, regles(k,:)];
		else
			T=[T, S(j)];		% c'est un symbole
		end
	end
	S=T;
	T=[];
end

% Retour des valeurs
T=S;
