Que signifie exactement « parsing » en programmation ?


Que signifie "parsing" en programmation ?

J'ai pris la liberté d'éditer la question ci-dessus, car elle disait à l'origine "Que signifie "parsing" en programmation ?", ce qui est une façon assez bizarre de poser une question, et elle a une infinité de réponses. La version éditée n'a qu'une ou deux réponses possibles, alors je l'ai modifiée pour que ce soit plus facile pour moi.


L'analyse syntaxique consiste à prendre un flux de texte et à le décomposer en morceaux significatifs. C'est un processus vital pour transformer un code écrit dans un certain langage de code source en un code exécutable qui peut être amené à effectuer une certaine tâche sur un ordinateur.

Le "parsing" en général consiste à transformer le langage écrit en signification - nous le faisons tout le temps. Par exemple, en lisant cette réponse, vous le faites dans votre cerveau pour comprendre de quoi je parle.

Lorsque nous tapons du code dans un ordinateur dans un certain langage - Java, par exemple - tout ce que nous faisons, c'est ajouter des caractères à un fichier texte. Pour que ce code ait ensuite une quelconque signification, nous devons suivre les règles strictes du langage - lorsque nous apprenons un langage de programmation, ce sont en fait ces règles que nous apprenons. Tant que ce que nous tapons est conforme aux règles, il est analysable, ce qui signifie qu'il est syntaxiquement correct. (Cela ne signifie pas que le programme lui-même est de quelque manière que ce soit correct, utile ou exempt de bogues).

L'analyseur syntaxique est une étape importante dans la compilation du code. Il décompose d'abord le flux de texte en une série de tokens, qui sont des unités de sens au sein du langage. Par exemple, un mot-clé, une valeur numérique, une parenthèse, et bien d'autres. Les unités de sens - les tokens - sont formées en un arbre d'analyse, qui est une structure hiérarchique révélant l'intention du programme - ce que font réellement les unités syntaxiques mises ensemble. Une fois que l'on est arrivé à une expression significative, le compilateur sera capable de générer du code sous une autre forme qui est une version exécutable par la machine du code que nous avons écrit - ou, si le code n'est pas conforme aux règles ou présente un autre problème, une erreur.

L'analyse syntaxique d'un langage informatique est un processus purement mécanique, et le langage est conçu pour être non ambigu, de sorte qu'il n'y a que quelques façons possibles d'exprimer une intention donnée. Ceci est différent du langage naturel, qui est beaucoup plus complexe, souvent ambigu, et généralement inadapté à la programmation (Des tentatives ont été faites pour rendre possible la programmation à l'aide d'un langage plus naturel, généralement assez peu réussies). S'il est possible d'analyser mécaniquement le langage naturel dans une certaine mesure, cela repose sur une quantité massive de contexte (en d'autres termes, l'intelligence de "savoir" de quoi on parle). En revanche, la plupart des langages informatiques sont " sans contexte ", ce qui signifie qu'aucune connaissance de ce type n'est nécessaire et qu'une machine muette et inintelligente peut le parser.