Bonsoir à tous, je cherche un programme simple d'un analyseur lexical en langage Delphi. C'est simple je pense mais mon problème c'est que je maîtrise pas le Delphi.![]()
Bonsoir à tous, je cherche un programme simple d'un analyseur lexical en langage Delphi. C'est simple je pense mais mon problème c'est que je maîtrise pas le Delphi.![]()
Vous êtes dans la même classe ?
aidez-moi svp si vous avez quelque chose sur l'analyseur lexical![]()
oui biensur ta raison voila mon travaille :
maintenant je veux savoir comment classer les unité lexical dont le resultat sera :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 procedure TForm1.Button1Click(Sender: TObject); var p,f,i:integer; mot,str:string; begin str:= edit1.text; i:=1; while i<= length(str) do begin while (i <= length(str)) and (str[i]=' ') do i:=i+1; p:=i; while (i<=length(str)) and ((str[i]<>' ')) do i:=i+1; f:=i-1; mot:=copy(str,p,f-p+1); memo1.lines.add(mot); end;
Mots-clés : function integer
Opérateurs : +
Identificateurs : max i j
Ponctuation : ( : ) ;
Et merci.
Bonjour,
une fois les différents mots ou opérateurs stockés dans des chaines, il faut faire un Case pour les ranger dans les différentes catégories (si c'est bien cela la question ?).
Comme le Case sur des Strings n'existe pas en Pascal, il faut utiliser la fonction AnsiIndexStr de l'unité StrUtils qui renvoie la position d'une chaine dans un tableau de chaines :
ou mieux, avec la fonction AnsiMatchStr on peut tester si c'est un opérateur, puis une fonction, puis un séparateur, ... Il faudra ensuite traiter les nombres et les variables.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 uses StrUtils; ... Case AnsiIndexStr(UpperCase(Mot), ['+', '*', 'FUNCTION', ...]) of 0 : // Mot à ranger dans les opérateurs 1 : // Mot à ranger dans les opérateurs 2 : // Mot à ranger dans les mots clefs -1 : // Mot inconnu end;
A+
Charly
Partager