Je cherche une définition claire de ce que sont un "tokenizer", "parser" et "lexer" et comment ils sont liés les uns aux autres (par exemple, un analyseur utilise-t-il un tokenizer ou vice versa)? J'ai besoin de créer un programme qui passera par les fichiers source c / h pour extraire la déclaration de données et les définitions.
J'ai cherché des exemples et je peux trouver des informations, mais j'ai vraiment du mal à comprendre les concepts sous-jacents tels que les règles de grammaire, les arbres d'analyse et l'arbre de syntaxe abstraite et comment ils sont liés les uns aux autres. Finalement, ces concepts doivent être stockés dans un programme réel, mais 1) à quoi ressemblent-ils, 2) y a-t-il des implémentations communes.
J'ai regardé Wikipedia sur ces sujets et programmes comme Lex et Yacc, mais n'ayant jamais suivi de cours de compilation (majeure EE), j'ai du mal à comprendre pleinement ce qui se passe.
Exemple:
Un lexer ou un tokeniser divisera cela en jetons «int», «x», «=», «1», «;».
Un analyseur prendra ces jetons et les utilisera pour comprendre d'une manière ou d'une autre:
la source
Je dirais qu'un lexer et un tokenizer sont fondamentalement la même chose, et qu'ils cassent le texte en ses composants (les «jetons»). L'analyseur interprète ensuite les jetons à l'aide d'une grammaire.
Je ne serais pas trop accroché à un usage terminologique précis - les gens utilisent souvent le terme «analyse» pour décrire toute action consistant à interpréter un morceau de texte.
la source
(en ajoutant aux réponses données )
la source