1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| program tp;
uses crt;
{type
lettres = array ['A'..'Z'];
digits = array['0'..'Z'];
speciaux = array ['+','-']
end;}
type genres = (alfanum, constante, oporateur) ;
sortes = (lettre, digit, special, blanc, autre) ;
codes = (identificateur, plus, moins, debut, fin, etc) ;
channes = record case genre : genres of
alfanum : (code : codes ; mot : char) ;
constante : (nb : integer) ;
oporateur : (codop : codes)
end ;
var car : array [1.. 255] of char ;
derniercar : char ; icar : 1 .. 255 ; sorte : sortes ;
lettres, digits, speciaux : set of char ;
entree : text ;
{procédures auxiliaires utilisées par lexico}
procedure cherchereserve (mot : char ; var code : codes) ;
begin {fournit le code du mot réservé} end ;
function cod (c : char) : codes ;
begin {fournit le code de l'opérateur} end ;
procedure erreur (k : integer) ;
begin {imprime un message d'erreur} end ;
procedure lire (var sorte : sortes) ;
var ch : char ;
begin {lire}
icar := icar + 1 ;
read (entree,ch) ;
car [icar] := ch ;
if ch in lettres then sorte := lettre else
if ch in digits then sorte := digit else
if ch in speciaux then sorte := special else
if ch = ' ' then sorte := blanc else sorte := autre
end {lire};
procedure compacter (var element : channes) ;
var i : 1 .. 255 ;
begin {compacter}
with element do
case genre of
alfanum: begin {pack (car,1,mot) ;}
code := identificateur ;
cherchereserve (mot,code)
end ;
constante : begin nb := 0 ;
for i := 1 to icar-1 do
nb :=nb*10+ord(car [i])-ord('0');
end ;
oporateur : codop := cod(car[1])
end {case}
end ; {compacter}
procedure lexico (var element : channes) ;
var sorte2 :sortes ; i : 1 .. 255 ; cr : char ;
begin
for i := 1 to 255 do car[i] := ' ' ;
if derniercar = ' ' then
begin
icar := 1;
lire (sorte);
end
else begin car[1] := derniercar ;
icar := 1
end;
case sorte of
lettre : begin lire (sorte2) ;
while (sorte2 = lettre) or (sorte2 = digit) do
lire (sorte2); cr:=car[icar]; car[icar]:=' ';
element.genre := alfanum ;
compacter (element) ; car[icar]:= cr
end;
digit : begin lire (sorte2) ;
while sorte2 = digit do lire (sorte2) ;
element.genre := constante;
compacter (element)
end ;
blanc : begin lire (sorte2) ;
while sorte2 = blanc do lire (sorte2)
end ;
special : begin element.genre := oporateur ;
compacter (element) ; sorte2 := blanc
end ;
autre : erreur(1);
end {case sorte} ;
derniercar := car [icar] ; sorte := sorte2;
end ; {lexico} |
Partager