Salut
Je suis en train d'écrire un algorithme d'analyseur lexical et syntaxique sur Pascal.
S'il y a quelqu'un pour m'aider
Version imprimable
Salut
Je suis en train d'écrire un algorithme d'analyseur lexical et syntaxique sur Pascal.
S'il y a quelqu'un pour m'aider
Bonjour et bienvenue,
Peux-tu décrire les problèmes que tu rencontres ?
Salut voici mon travail pour analyse lexicale :
Mon problème c'est ce que je dois faire pour le programme que je dois analyserCode:
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}
et quoi pour les messages d'erreurs...