Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Verification de syntaxe et exceptions...

8 réponses
Avatar
Eddahbi Karim
Bonjour/Bonsoir,

Le sujet est pas très clair donc je vais tenter d'éclaircir la
situation.

Je dois faire un programme qui effectuera une vérification syntaxique
simple (Vérifier si les accolades, crochets ou parenthèses sont bien
refermées si ouvertes. Même chose pour les guillemets et commentaires)

Le question que je me pose est :

Est il possible dans un code C de voir des accolades après des
parenthèses.

Genre : fonction(... blabla { ... } );

Si la réponse est non, je dois rajouter une vérification à mon programme.
(Pas de '{' ou de '}' après des parenthèses).

Mais je suis pas sûr du tout...

Merci,

--

Remove 'dot' INVALID to mail me
EN-FR : dot->point :P

8 réponses

Avatar
Antoine Leca
En 40756f39$0$26438$, Eddahbi Karim va escriure:
Le question que je me pose est :

Est il possible dans un code C de voir des accolades après des
parenthèses.


D'abord, à l'intérieur des arguments d'une macro, oui bien sûr.
Par exemple:

#define GEN(typ, nom, decl) extern typ nom decl

GEN(int, x, ;)
GEN(int, main(void), ;)
GEN(int, mafonc(int x), { return x=rand(); })


Mais je suppose que pour ne pas perdre trop de points de santé mentale, tu
opères sur des après préprocesseur, donc sans macros... ;)

En C90, je pense que ce n'est pas possible (mais je n'ai pas trop réfléchi).
En C99, par contre, c'est certainement possible, avec les arguments typés:

#include <stdio.h>
int main(void) {
printf( (char[]){'h','e','l','l','o',' ','w','o','r','l','d','!','n',0});
return 0;
}

Il y a des accolades à l'intérieur des parenthèses qui délimitent les
arguments passés à printf.

Dans ce cas, une parenthèse fermante précédera toujours une accolade
ouvrante; de plus, à l'intérieur des accolades, les parenthèses doivent être
équilibrées, et vice-versa; et même les crochets, carrés comme pointus,
doivent aussi être équilibrés entre eux. (Tout ceci n'est évidement pas vrai
avec les macros, où là tu peux faire ce que tu veux).


Antoine

Avatar
Horst Kraemer
On 08 Apr 2004 15:26:49 GMT, Eddahbi Karim
wrote:

Bonjour/Bonsoir,

Le sujet est pas très clair donc je vais tenter d'éclaircir la
situation.

Je dois faire un programme qui effectuera une vérification syntaxique
simple (Vérifier si les accolades, crochets ou parenthèses sont bien
refermées si ouvertes. Même chose pour les guillemets et commentaires)

Le question que je me pose est :

Est il possible dans un code C de voir des accolades après des
parenthèses.

Genre : fonction(... blabla { ... } );


Oui.


void f ( struct { int i,j; } *s )
{
s->i = s->j = 0;
}


--
Horst

Avatar
Eddahbi Karim
Le 08-04-2004,
Antoine Leca a martirisé son clavier pour dire:

En 40756f39$0$26438$, Eddahbi Karim va escriure:
Le question que je me pose est :

Est il possible dans un code C de voir des accolades après des
parenthèses.


D'abord, à l'intérieur des arguments d'une macro, oui bien sûr.
Par exemple:

#define GEN(typ, nom, decl) extern typ nom decl

GEN(int, x, ;)
GEN(int, main(void), ;)
GEN(int, mafonc(int x), { return x=rand(); })


Mais je suppose que pour ne pas perdre trop de points de santé mentale, tu
opères sur des après préprocesseur, donc sans macros... ;)



Je ne m'étais pas posé cette question mais je pense que c'est ce que je vais
faire...

En C90, je pense que ce n'est pas possible (mais je n'ai pas trop réfléchi).


Horst Kraemer (Si j'ecorche pas son nom, ni son prénom) semble avoir trouvé
une possibilité

En C99, par contre, c'est certainement possible, avec les arguments typés:

#include <stdio.h>
int main(void) {
printf( (char[]){'h','e','l','l','o',' ','w','o','r','l','d','!','n',0});
return 0;
}

Il y a des accolades à l'intérieur des parenthèses qui délimitent les
arguments passés à printf.

Dans ce cas, une parenthèse fermante précédera toujours une accolade
ouvrante; de plus, à l'intérieur des accolades, les parenthèses doivent être
équilibrées, et vice-versa; et même les crochets, carrés comme pointus,
doivent aussi être équilibrés entre eux. (Tout ceci n'est évidement pas vrai
avec les macros, où là tu peux faire ce que tu veux).



Je pense avoir trouvé une méthode pour vérifier tout équilibrement entre
parenthèses et accolades à un quelquonque endroit du fichier source sans
se préoccuper des "espaced sequences" (On dit comment en bon Français :
séquence d'échappement ? Je n'ai que deux livres anglais...)

Je vais aussi, pour l'instant, demander à ce que l'on utilise un fichier
sans macro :P


Antoine



Karim,

--

Remove 'dot' INVALID to mail me
EN-FR : dot->point :P


Avatar
Eddahbi Karim
Le 08-04-2004,
Horst Kraemer a martirisé son clavier pour dire:
On 08 Apr 2004 15:26:49 GMT, Eddahbi Karim
wrote:


Oui.


void f ( struct { int i,j; } *s )
{
s->i = s->j = 0;
}




Ok merci bien.

--

Remove 'dot' INVALID to mail me
EN-FR : dot->point :P

Avatar
Yves ROMAN

On 08 Apr 2004 15:26:49 GMT, Eddahbi Karim
wrote:

Bonjour/Bonsoir,

Le sujet est pas très clair donc je vais tenter d'éclaircir la
situation.

Je dois faire un programme qui effectuera une vérification syntaxique
simple (Vérifier si les accolades, crochets ou parenthèses sont bien
refermées si ouvertes. Même chose pour les guillemets et commentaires)

Le question que je me pose est :

Est il possible dans un code C de voir des accolades après des
parenthèses.

Genre : fonction(... blabla { ... } );


Oui.

void f ( struct { int i,j; } *s )
{
s->i = s->j = 0;
}



Comment une telle fonction peut-elle être appelée sans une bordée d'injures du
compilateur ?

struct { int i,j; } data ;
f(&data) ;

Les 2 types (protoype et variable) sont ils compatibles ?


Avatar
Horst Kraemer
On Fri, 09 Apr 2004 10:12:17 +0200, Yves ROMAN
wrote:


On 08 Apr 2004 15:26:49 GMT, Eddahbi Karim
wrote:

Bonjour/Bonsoir,

Le sujet est pas très clair donc je vais tenter d'éclaircir la
situation.

Je dois faire un programme qui effectuera une vérification syntaxique
simple (Vérifier si les accolades, crochets ou parenthèses sont bien
refermées si ouvertes. Même chose pour les guillemets et commentaires)

Le question que je me pose est :

Est il possible dans un code C de voir des accolades après des
parenthèses.

Genre : fonction(... blabla { ... } );


Oui.

void f ( struct { int i,j; } *s )
{
s->i = s->j = 0;
}



Comment une telle fonction peut-elle être appelée sans une bordée d'injures du
compilateur ?


/* begin file a.c */
void f ( struct { int i,j; } *s )
{
s->i = s->j = 0;
}
/* end file a.c */


/* begin file b.c */

struct { int i,j; } data ;
f(&data) ;

/* end file b.c */

Voir la norme 6,2,7 paragraphe 1

--
Horst



Avatar
Antoine Leca
En 4075ca8e$0$26424$, Eddahbi Karim va escriure:
Je pense avoir trouvé une méthode pour vérifier tout équilibrement
entre parenthèses et accolades à un quelquonque endroit du fichier
source sans se préoccuper des "espaced sequences"


Quelles "séquences d'échappement" ?
Les chaînes de caractères ont été traitées auparavant, non ?

Parce que si tu mélanges ce qui est du niveau du découpage lexical (les
chaînes de caractères) avec ce qui est du niveau syntaxique (les parenthèses
et autres signes de ponctuation), tu vas au devant de gros problèmes.
Je te recommande de prendre un bouquin d'introduction à la théorie des
compilateurs et de le potasser, avant toute chose (le moins épais fera
l'affaire).


Antoine

Avatar
Eddahbi Karim
Le 2004-04-13,
Antoine Leca a martirisé son clavier pour dire:

Quelles "séquences d'échappement" ?
Les chaînes de caractères ont été traitées auparavant, non ?

Parce que si tu mélanges ce qui est du niveau du découpage lexical (les
chaînes de caractères) avec ce qui est du niveau syntaxique (les parenthèses
et autres signes de ponctuation), tu vas au devant de gros problèmes.
Je te recommande de prendre un bouquin d'introduction à la théorie des
compilateurs et de le potasser, avant toute chose (le moins épais fera
l'affaire).



Je dois vérifier que les guillemets (Je sais pas si c'est la bonne
traduction de 'quote') simple et doubles sont bien équilibrés.
Mais je dois éviter ce tomber dans ce genre de panneau :

''' : Unbalanced quotes...

C'est pour cela que j'ai dit que je gérais aussi les séquences d'échappement.
C'est un des buts du projet (En faites c'est qu'un simple exercice)

--

Remove 'dot' INVALID to mail me
EN-FR : dot->point :P