je cherche un simple programme d'un analyseur lexical dont aprés le texte entrant le resultat sera:
mot clés:begin, end, ...
ponctuation: ; , : ,. ,(......
identificateur: i, j...
opérateurs: < > := ..
s'il vous plait qui peut m'aider
et merci
je cherche un simple programme d'un analyseur lexical dont aprés le texte entrant le resultat sera:
mot clés:begin, end, ...
ponctuation: ; , : ,. ,(......
identificateur: i, j...
opérateurs: < > := ..
s'il vous plait qui peut m'aider
et merci
Salut
Pourrais-tu être plus explicite ?
Que doit faire le programme exactement ?
Pour quel usage ?
Etc.
Cordialement
bon pour etre plus claire je donne un exemple: l'utilisateur entre cette fonction
function max (i,j) :integer ;
et le programme va afficher comme resultat les unité lexical:
mot clé: function
identificateur: i j
ponctuation , ( )
operateur par exp + - ..
et merci .
Bof, c'est un exercice banal, ça.
Qu'as-tu écrit (code, pseudo-code, organigramme...) ?
voila le code :
function max (i,j:integer) : integer;
begin
if i>j then max:= i else maw:= j
end;
je cherche un programme qui identifier les unités lexical et leurs types svp.
et merci
salut
le premier conseille serait de l'analyser manuellement et de noter le processus que tu utilise pour y parvenir
je m'explique reprenons ton code
comme tu l'as compris dans d'autre post que tu as émis, tu doit découper ton texte en mot
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function max (i,j:integer) : integer; begin if i>j then max:= i else maw:= j end;
ce qui dans ton cas donnera
function
max
(
i
,
j
:
integer
)
: integer on passe ces deux termes car on les a déjà défini avant
;
begin
if
i
>
j
then
max
:=
i
else
max:= j
end
;
une fois que tu as fais cela
il te reste donc
function
max
(
i
,
j
:
integer
)
;
begin
if
>
then
:=
else
end
voila donc ta liste de mots disponible pour cette fonction .
maintenant comment ton cerveau sais à quoi correspond tel ou tel terme ?
je pense que comme moi tu l'as appris soit par des livres, soit par des cours, soit autrement
il te faut donc rapprocher ces termes avec des listes de lexème prédéfini
d’après ce que tu as dis, il te faut :
une liste de mot clé
une liste d’opérateur
une liste de type ordinal ou complexe
une fois que tu as défini ces listes, il ne te reste plus qu'a comparer tes mots avec les lexèmes prédéfini dans les listes
voila une première explication succin, mais qui te permettra d'avancer un peu dans ton projet
une fois que tu auras fais ça on pourra approfondir et affiner le raisonnement pour analyser la fonction dans son ensemble
merci beaucoup , mais esque tu peux m'aider pour faire la fonction qui permet de suprimer le vide et sauter la ligne SVP
et merci d'avance
salut
oui je peut t'aider ... les autres aussi
bon alors comment faire pour lire un texte ?
je suppose que tu as déjà une petite idée ?
tout est dans les boucles
la première chose à trouver c'est la longueur de la chaine
voici un code basique pour parcourir un texte
une fois cette boucle principale compris il te faut faire différent test
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 LgChaine := length(MonTexte); iPosCurrent := 1; while (iPosCurrent <=LgChaine do begin ... inc(iPosCurrent); end;
on va se construire quelque fonction utile
voila c'est tout pour ce soir ... essai de voir comment tu organiserais le code pour pouvoir en extraire une liste de mots
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 /////////////////////////////////////////////////////////////////////////////// function IsDigit:Boolean; begin Result := (iPosCurrent<=LgChaine) and (MonTexte[iPosCurrent] in ['0'..'9']) ; end; /////////////////////////////////////////////////////////////////////////////// function IsAlpha:boolean; begin Result:=(iPosCurrent<=LgChaine) and (UpCase(MonTexte[iPosCurrent]) in ['A'..'Z','_']); end; /////////////////////////////////////////////////////////////////////////////// function IsOperateur : boolean; begin Result:=(iPosCurrent<=LgChaine) and (MonTexte[iPosCurrent] in ['(',';',':','=',')']); end; /////////////////////////////////////////////////////////////////////////////// function ExtractMot : String; begin Result:=copy(Line,iPosStart,IPosEnd); end; /////////////////////////////////////////////////////////////////////////////// function GetDigit : string; var i:integer; begin IPosStart :=iPosCurrent; while IsDigit do inc(iPosCurrent); IPosEnd :=iPosCurrent -1; Result :=ExtractMot; end; /////////////////////////////////////////////////////////////////////////////// function GetAlpha : string; var i:integer; begin IPosStart :=iPosCurrent; while IsAlpha do inc(iPosCurrent); IPosEnd :=iPosCurrent -1; Result :=ExtractMot; end; ///////////////////////////////////////////////////////////////////////////////
et construit d'autre fonction si besoin est
Juste un détail, pour tester si un caractère est une "lettre" (donc faisant partie soit d'un identifiant, soit d'une chaîne de caractères), je mettrais plutôt :car les minuscules en font partie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ... in ['A'..'Z','_','a'..'z']
Mais je suppose que tout le monde avait rectifié !
salut
effectivement c'est un choix ... mais si tu avais bien examiné mon code je test avec un upcase() ce qui a pour effet de mettre en majuscule le caractère testé
c'est donc pour cela que j'avais délibérément réduit ma liste de caractère mais effectivement rien ne t’empêche d’agrandir la liste.
Dans ce cas là le contrôle sera écrit de cet façon
voila pour la rectification
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 /////////////////////////////////////////////////////////////////////////////// function IsAlpha:boolean; begin Result:=(iPosCurrent<=LgChaine) and (MonTexte[iPosCurrent] in ['A'..'Z','_','a'..'z']); end;
Bon, décidément, il est temps que je prenne ma retraite, moi !
merci j'essaye d'avancer dans mon travail
salut,
bon maintenant que tu as avancé ...
tu vas pouvoir nous montrer ton code et à partir de là tu vas pouvoir faire évoluer ton programme
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager