Langage C




Expertise (5/5)



Je développe en C depuis 14 ans. Je m’oriente de plus en plus vers des langages qui possèdent des trousses à outils plus riches et qui sont plus demandés sur le marché du travail (PHP, Java, C#, en particulier).

L'analyse syntaxique en C, avec Flex - Utilisation basique

Descrition

Ce code est extrait d'un logiciel que j'ai développé et dont la fonction tait d'assurer la répartition de charge entre plusieurs serveurs.

Le fichier de configuration du logiciel contient, entre autres choses, des lignes qui ressemblent à ça :


Remarque: Veuillez noter que cet exemple de fichier de configuration ne contient pas de caractère "espace". Il n'y a que des tabulations.

L'analyseur syntaxique - loadb.lex

Remarque: Notez l'utilisation des contextes.


Note: Pour accepter les fins de lignes sous UNIX ou sous Windows:


Intégration de l'analyseur au code du logiciel - loadb.c


Makefile


Sources

Veuillez cliquer sur le lien pour télécharger les sources de l'analyseur.

L'analyse syntaxique en C, avec Flex - Utilisation depuis une socket

Descrition

Cet exemple crée un petit serveur sur lequel il est possible de se connecter via Telnet. Ce serveur reçoit des chaînes de caractères, censées contenir des tags "${TAG}" (exemples "${NAME}", "${ADDRESS}",...). Ce serveur extrait les noms des tags envoyés et il les affiche simplement.

Remarque: Ce code est inspiré d'un serveur beaucoup plus complexe que j'ai développé.

L'analyseur syntaxique - fdscan.lex


Intégration de l'analyseur au code du logiciel - fdscan.c


Instructions de compilation


Sources

Veuillez cliquer sur le lien pour télécharger les sources de l'analyseur.

L'analyse syntaxique en C, avec Flex - Utilisation avec des tampons

Descrition

Cet exemple illustre les points suivants :

Premier analyseur syntaxique - hasher.lex


Second analyseur syntaxique - hasher1.lex


Intégration des deux analyseurs au logiciel - test_hasher.c


Instructions de compilation


Sources

Veuillez cliquer sur le lien pour télécharger les sources de l'analyseur.

L'analyse syntaxique en C, avec Flex - Un serveur SMTP

Cet exemple est tiré du code d'un serveur SMTP très spécifique (pour une utilisation spécialisée) que j'ai développé. Ce serveur simple affiche le contenu des sections "DATA" des emails envoyés par les clients.

L'analyseur syntaxique - smtpd.lex


Intégration de l'analyseur au code du logiciel - smtpd.c et smtpd.h



Makefile


Flex et problème de "réentrance" - utilisation du C++

Les analyseurs Flex "en C" utilisent des variables globales. Ces variables sont utilisées pour stocker des états internes à la fonction yylex(). Par conséquent, il est impossible d'utiliser un analyseur Flex "en C" pour analyser deux flux en même temps.

Pour générer un analyseur Flex qui soit capable d'analyser plusieurs flux simultanément, il faut passer par l'utilisation du C++. Les variables utilisées pour stocker les états de l'analyseur sont "encapsulées" dans des classes.

L'analyseur syntaxique - file.lex


Intégration de l'analyseur dans un outil destiné à lire des fichiers - file.cc


Intégration de l'analyseur dans un outil destiné à lire des tampons (en mémoire) - string.cc


Makefile


Un serveur DHCP spécialement adapté aux besoins d'un FAI

Ce serveur DHCP a été développé pour répondre aux besoins spécifiques d’un gros fournisseur d’accès Internet.

Remarque: Ce serveur a supporté environ 1 500 000 clients DHCP pendant 3 trois, sans interruption. Aucun problème n’a été constaté.

Les fichiers d'entête

ack_codes.h


config.h


conversion.h


dhcp.h


find_ip_and_reply.h


flock.h


libhttp.h


libip.h


logging.h


logistic.h


modem.h


mysql_header.h


mysql_interface.h


packets.h


packets_data.h


packets_operations.h


server_config.h


sockets.h


tables.h


Les fichiers C et Flex

config.c


config.lex


configuration.c


conversion.c


dhcp.c


find_ip_and_reply.c


flock.c


hitachi.c


libhttp.c


libip.c


logging.c


logistic.c


modem.c


mysql.c


mysql_interface.c


packets.c


packets_operations.c


read_conf.c


sockets.c


vci_surf.c


vci_tv.c


Configuration Doxygen


Documentation du code

Cliquez sur ce lien pour accéder à la documentation du serveur DHCP. Cette documentation a été générée avec Doxygen.

Makefile


Développement système sous UNIX

Les codes ci-après sont extraits d’une petite librairie que j’ai développée au fil du temps. Veuillez cliquer sur ce lien pour télécharger l’archive de la librairie.

Les entêtes

array.h


bitmanip.h


buffers.h


cgi.h


chtbl.h


config.h


cyclic_buffer.h


date.h


deamon.h


dmalloc.h


double_list.h


dstring.h


files.h


flock.h


hashfunc.h


list.h


my_dir.h


my_endian.h


my_math.h


my_sem.h


my_shm.h


my_smtp.h


my_sockets.h


option.h


replacer.h


sha.h


signals.h


sort.h


stack.h


strings_utils.h


timing.h


Les sources

array.c


cgi.c


char2hex.c


chtbl.c


config.c


config.lex


cyclic_buffer.c


date.c


date.lex


dates.c


deamon.c


dir.c


dmalloc.c


dstring.c


endian.c


files.c


flock.c


hashfunc.c


issort.c


list.c


make_char2hex.c


make_char2int.c


make_dates.c


make_hexa_codes.c


my_math.c


option.c


os_specific.c


qksort.c


rand_dates.c


replacer.c


replacer.lex


sem.c


sha.c


shm.c


signals.c


smtp.c