Je suis en train d'écrire un petit programme (en fait un interprêteur) et pour ce faire, j'ai besoin de détecter facilement si un string est valide dans ce langage.
Voici le langage en question :
Aucun problème avec X et L.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 X = [a-z0-9] L = lambda X ° U U = (U)U
Ce n'est pas le cas de U.
(f)x avec f et x appartenant à X ne pose aucun problème.
En effet, si j'utilise cette expression régulière :
alors je me retrouve avec le problème suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^\s*\(\s*(?<u>.+)\s*\)(?<v>.+)\s*
(f)(f)x devient f)(f et x.
Et évidemment f)(f est illégal dans ce langage.
Si j'utilise cette expression régulière :
alors je me retrouve avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^\s*\(\s*(?<u>.+?)\s*\)(?<v>.+)\s*
((f)f)x qui devient (f et f)x qui sont tous les deux illégaux.
Bref, existe-il un moyen efficace en utilisant une expression régulière de résoudre de problème ou bien ferais-je mieux de scanner les caractères un à un en comptant les parenthèses ouvrantes/fermantes ?
Partager