2009-11-15 4 views
14

J'ai déjà fait un scanner, maintenant je suis supposé faire un analyseur. Quelle est la différence?Quelle est la différence entre un analyseur et un scanner?

+2

J'ai retiré la balise 'Flex' et l'ai remplacée par la balise' lexical-analyseur 'plus générale puisque la balise 'Flex' de StackOverflow fait référence à Adobe Flex Framework. –

Répondre

17

Un scanner transforme simplement une chaîne d'entrée (disons un fichier) en une liste de jetons. Ces jetons représentent des éléments tels que des identificateurs, des parenthèses, des opérateurs, etc.

Un analyseur convertit cette liste de jetons en un objet semblable à un arbre pour représenter comment les jetons s'assemblent pour former un ensemble cohérent (parfois appelé phrase).

En termes d'analyseurs de langage de programmation, la sortie est généralement appelée un arbre de syntaxe abstraite (AST). Chaque noeud de l'AST représente une construction différente du langage, par ex. une instruction IF serait un nœud avec 2 ou 3 sous-nœuds, un nœud CONDITION, un nœud THEN et potentiellement un nœud ELSE.

Un analyseur ne donne aucune signification aux nœuds au-delà de la cohésion structurelle. La prochaine chose à faire est d'extraire le sens de cette structure (parfois appelée analyse contextuelle).

2

Parsing (dans un sens général) consiste à transformer les symboles (caractères, chiffres, parens gauche, etc.) en phrases de votre grammaire.

L'analyseur lexical (le « analyseur syntaxique ») analyse des symboles individuels à partir du fichier de code source en jetons. A partir de là, le "parser" proprement dit transforme ces jetons entiers en phrases de votre grammaire.

En d'autres termes, le lexeur combine des symboles en jetons, et l'analyseur combine des jetons pour former des phrases.

Questions connexes