Delphi Plan1.solution

 (CD-ROMDelphi.PlanAction)



: Les projets Delphi


Objectif : Effectuer la saisie de mots décrits par une grammaire LL(1) à partir de plans d'action associés à la grammaire (saisie dirigée par la syntaxe).

Rappelons qu'un plan d'action est composé de trois entités : un ensemble d'objet d'une interface, les états de ces objets, et les actions effectuées sur ces objets. Dans le cas où nous effectuons une saisie dirigée par la syntaxe, ce sont les éléments du vocabulaire auxiliaire de la grammaire qui déterminent chacun un plan d'action

La grammaire des mots à saisir.

Les plans d'action associés à chacun des éléments du vocabulaire auxiliaire de la grammaire.

La fiche principale, le code associé dans la unit

Exécuter le programme
 
 

La grammaire G  des mots à saisir :

   VT = {a, b}
   VN = {A, S}
   axiome: S
 

Règles
 1 : S ----> aAS 
 2 : S ----> b
Règles
 3 : A ----> a 
 4 : A ----> bSA
 Cette grammaire est de type LL(1), voici les ensembles Init de chaque symbole du vocabulaire auxiliaire :

               Init(A) = Init(S) = { a , b}
                                                                                   Remonter 
 

Les plans d'action associés au symbole "A" et à l'axiome "S" :
 

Plan associé à A
 Activer(a) ; 
 Activer(b) ; 
 Saisie(SymLu) ; 
 si action = a alors 
     désactiver(a) 
 sinon 
   désactiver(b); 
      Plan S; 
      Plan A 
 fsi 
 désactiver(a) ; 
 désactiver(b) ; 
Plan associé à S
 Activer(a) ; 
 Activer(b) ; 
 Saisie(SymLu) ; 
 si action = a alors 
     désactiver(a) ; 
        Plan A ; 
        Plan S 
 sinon 
  désactiver(b); 
 fsi ; 
 désactiver(a) ; 
 désactiver(b) ; 

                                                                                    Remonter 

La fiche principale du  projet :

                                                                                    Remonter 
 

Implantation Delphi de chacun des plans :
 
 
procedure Plan_A; 
begin
 with Form1 do 
 begin 
  Activer(Button-a); 
  Activer(Button-b); 
  AttenteSaisie
  if SymLu='a' then 
     Desactiver(Button_a) 
  else 
  begin 
   Desactiver(Button_b); 
   Plan_S; 
   Plan_A 
  end; 
  Desactiver(Button_a); 
  Desactiver(Button_b) 
 end 
end;
procedure Plan_S; 
begin
 with Form1 do 
 begin 
  Activer(Button_a); 
  Activer(Button_b); 
  AttenteSaisie
  if SymLu='a' then 
  begin 
     Desactiver(Button_a); 
     Plan_A; 
     Plan_S 
  end 
  else 
  Desactiver(Button_a); 
  Desactiver(Button_b) 
 end 
end

procedure Activer(Elt:TButton);
begin
 Elt.enabled:=true;
end;

procedure Desactiver(Elt:TButton);
begin
 Elt.enabled:=false;
end;

                                                                                   Remonter 

Le code de la Unit fiche principale :

unit UFPlan1;

 interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

 type
  TForm1 = class(TForm)
    Button_a: TButton;
    Button_b: TButton;
    Edit_saisie: TEdit;
    ButtonLancer: TButton;
    procedure ButtonLancerClick(Sender: TObject);
    procedure Button_aetbClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

 procedure Plan_A;
procedure Plan_S;
var
  Form1: TForm1;

 implementation

var SymLu:string;
    ActionFaite:boolean;

 {$R *.DFM}
procedure RAZTout;
begin
 with Form1 do
 begin
  Button_a.enabled:=false;
  Button_b.enabled:=false;
  SymLu:='';
  ActionFaite:=false;
  Edit_saisie.text:=''
 end
end;

 procedure PlanSuivant;
begin
   Form1.ButtonLancer.enabled:=true;
end;

 procedure Activer(Elt:TButton);
begin
 Elt.enabled:=true;
end;

 procedure Desactiver(Elt:TButton);
begin
 Elt.enabled:=false;
end;

procedure AttenteSaisie;
  procedure Attendre;
  begin
    if not ActionFaite then
    begin
     repeat
       Application.ProcessMessages
     until  ActionFaite ;
     ActionFaite:=false
    end
  end{ Attendre};

   procedure saisie(ch:string);
  begin
   if ActionFaite=false then
    Form1.Edit_saisie.text:= Form1.Edit_saisie.text+' '+ch
   else ActionFaite:=false
  end{saisie};

 begin
  Attendre;
  saisie(SymLu);
end{AttenteSaisie};
                                    Remonter 

{ ---- Les procédures des plans d'actions ---- }

procedure Plan_A;
begin
 with Form1 do
 begin
  Activer(Button_a);
  Activer(Button_b);
  AttenteSaisie;
  if SymLu='a' then
     Desactiver(Button_a)
  else
  begin
   Desactiver(Button_b);
   Plan_S;
   Plan_A
  end;
  Desactiver(Button_a);
  Desactiver(Button_b)
 end
end;

 procedure Plan_S;
begin
 with Form1 do
 begin
  Activer(Button_a);
  Activer(Button_b);
  AttenteSaisie;
  if SymLu='a' then
  begin
     Desactiver(Button_a);
     Plan_A;
     Plan_S
  end
  else
  Desactiver(Button_a);
  Desactiver(Button_b)
 end
end;

 procedure TForm1.ButtonLancerClick(Sender: TObject);
begin
  RAZTout;
  ButtonLancer.enabled:=false;
  Plan_S;
  PlanSuivant;
end;

 procedure TForm1.Button_aetbClick(Sender: TObject);
begin
 ActionFaite:=true;
 Symlu:=TButton(Sender).caption
end;

 procedure TForm1.FormCreate(Sender: TObject);
begin
 RAZTout;
end;

 end.                                                                           Remonter 



EXECUTION DU PROGRAMME :