CompilateurEn informatique, un compilateur est un programme qui transforme un code source en un code objet. Généralement, le code source est écrit dans un langage de programmation (le langage source), il est de haut niveau d'abstraction, et facilement compréhensible par l'humain. Le code objet est généralement écrit en langage de plus bas niveau (appelé langage cible), par exemple un langage d'assemblage ou langage machine, afin de créer un programme exécutable par une machine.
Graphe de flot de contrôleEn informatique, un graphe de flot de contrôle (abrégé en GFC, control flow graph ou CFG en anglais) est une représentation sous forme de graphe de tous les chemins qui peuvent être suivis par un programme durant son exécution. Dans un GFC, les sommets du graphe représentent un bloc de base, c'est-à-dire un bout de code d'un seul tenant sans sauts ni cibles de sauts. Les cibles de sauts marquent le début d'un bloc de base, tandis que les sauts en marquent la fin. Les arcs représentent les sauts dans le flot de contrôle.
Grammaire d'arbres adjointsLa grammaire d'arbres adjoints, grammaire TAG, ou légèrement sensible au contexte, est un formalisme d'analyse grammaticale introduit par Aravind K. Joshi et ses collègues en 1975. Ce formalisme a été utilisé à différentes fins, et particulièrement en linguistique formelle et informatique pour le traitement de la syntaxe des langues naturelles. Historiquement, il a d'abord permis de représenter de manière directe des dépendances à longue distance et il permet également de représenter les dépendances croisées du suisse allemand et du flamand occidental, phénomène qui ne peut se traiter avec une grammaire de réécriture hors contexte, comme l'a montré S.
Grammaire ambigüeEn informatique théorique et en théorie des langages, une grammaire ambiguë ou ambigüe est une grammaire algébrique qui admet un mot avec deux dérivations gauches distinctes ou — de manière équivalente — deux arbres de dérivation distincts. L'ambiguïté ou l'inambiguïté est une propriété des grammaires, et non des langages. De nombreux langages admettent à la fois des grammaires ambiguës et inambigües, alors que d'autres ne possèdent que des grammaires ambiguës.
Grammaire contextuelleUne grammaire contextuelle est une grammaire formelle dans laquelle les substitutions d'un symbole non terminal sont soumises à la présence d'un contexte gauche et d'un contexte droit. Elles sont plus générales que les grammaires algébriques. Les langages formels engendrés par les grammaires contextuelles sont les langages contextuels. Ils sont reconnus par les automates linéairement bornés. Les grammaires contextuelles ont été décrites par Noam Chomsky. Ce sont les grammaires de type 1 dans la hiérarchie de Chomsky.
Yacc (logiciel)Yacc est un outil de génération d'analyseurs syntaxiques en langage C. Yacc est l'acronyme de Yet Another Compiler Compiler (« Encore un autre compilateur de compilateur »).Yacc est notamment utilisé dans la construction des jeux d'instructions en langage machine pour les microprocesseurs. Du point de vue de la classification des langages, Yacc fournit le code nécessaire à l'analyse de langages de type 2 (non contextuels). Il est fréquemment utilisé en association avec Lex, générateur d'analyseur lexical.
Expression régulièrevignette|Stephen Cole Kleene, dont les travaux ont fondé le concept d'expression régulière. En informatique, une expression régulière ou expression rationnelle ou expression normale ou motif est une chaîne de caractères qui décrit, selon une syntaxe précise, un ensemble de chaînes de caractères possibles. Les expressions régulières sont également appelées regex (un mot-valise formé depuis l'anglais regular expression). Les expressions rationnelles sont issues des théories mathématiques des langages formels des années 1940.
Langage algébriqueEn théorie des langages formels, un langage algébrique ou langage non contextuel est un langage qui est engendré par une grammaire algébrique. De manière équivalente, un langage algébrique est un langage reconnu par un automate à pile. Les langages algébriques forment les langages de dans la hiérarchie de Chomsky. Ils ont des applications importantes dans la description des langages de programmation et en linguistique. Ils interviennent également dans la description des langages XML.
Génération de code natifLa génération de code natif est l'étape du processus de compilation transformant l'arbre syntaxique abstrait enrichi d'informations sémantiques en code machine ou en bytecode spécialisé pour la plateforme cible. C'est l'avant-dernière étape du processus de compilation qui se situe avant l'édition des liens. La phase de génération de code natif inclut généralement : Le choix des instructions à émettre ; L'ordonnancement des instructions : dans quel ordre émettre les instructions.
Use-define chainWithin computer science, a Use-Definition Chain (UD Chain) is a data structure that consists of a use, U, of a variable, and all the definitions, D, of that variable that can reach that use without any other intervening definitions. A UD Chain generally means the assignment of some value to a variable. A counterpart of a UD Chain is a Definition-Use Chain (DU Chain), which consists of a definition, D, of a variable and all the uses, U, reachable from that definition without any other intervening definitions.