- c'est un problème trop compliqué.
Non. Tu confonds analyse lexicale et analyse syntaxique, comme l'a dit entwanne. Ça fait certes un peu pointilleux de différentier les deux quand on parle de compilation, mais il s'agit malgré tout de deux problèmes différents, et les regexp sont adaptées pour le premier.
- la syntaxe n'est pas adapté pour ça. Il n'y a pas de symboles.
Ça n'est pas le bon argument : c'est une question d'implémentation. Il n'y a rien qui dise que les expressions rationnelles doivent considérer l'alphabet ascii (ou n'importe quel ensemble de caractères que tu mets dans les string
de ton langage préféré), et il existe tout un tas de moteurs de regexp qui permettent d'utiliser d'autres alphabets. Certes, pas re
de python.
- et surtout, il y a des syntaxes faites pour (BNF et consorts), qui sont bien plus lisibles et les implémentations sont bien plus performantes.
La même que plus haut : tu parles d'analyse syntaxique (obtenir un AST à partir d'une liste de lexèmes), pas d'analyse lexicale (obtenir une liste de lexèmes à partir d'une chaîne de caractères). Et ça fait effectivement partie des problèmes pour lesquels il faut quelque chose de plus puissant que les expressions rationnelles, cf. le deuxième point de mon message précédent.
Les regexps valent le coup par contre pour de l'analyse statique de code (signaler un mauvais nombre d'espace entre une parenthèse fermante et une accolade ouvrante par exemple), c'est plus simple à mettre en place et on ne recherche que des cas spécifique dans le code, on ne cherche pas à analyser tous le code. On peut aussi ajouter des règles facilement.
C'est un peu culotté de dire « l'analyse syntaxique c'est trop compliqué pour les regexp » et « l'analyse statique c'est une bonne utilisation des regexp » dans le même message
Le cas d'utilisation que tu décris est quelque chose d'excessivement simple (il n'y a même pas besoin de regex pour ça), et l'analyse statique est un domaine beaucoup plus vaste. Alors bien sûr, techniquement, on peut appeler n'importe quelle analyse de programme qui n'exécute pas ledit programme une analyse statique. Mais dans le cas général, c'est un problème qui est beaucoup beaucoup beaucoup plus complexe (et intéressant) que savoir si oui ou non on a bien mis le bon nombre d'espaces entre le if
et l'accolade qui suit. Les « analyses statiques » qui fonctionnent avec des regexp en sont un micro sous-ensemble, et concrètement, on ne peut en gros rien faire d'intéressant avec. Par exemple, même une simple propagation de constantes est hors de portée.