Je ne suis pas étudiant en informatique et je travaille en tant que développeur web (java, python, AS3, etc.) en tant que professionnel. Je prends 1 cours par semestre dans mon université locale. J'avais pris l'intelligence artificielle (comprenant la logique, la grammaire sans contexte, l'analyse CYK, la PNL d'introduction, les chaînes de Markov, HMM, etc.) le semestre dernier.
Je prévois de suivre un cours d'introduction aux compilateurs dans le prochain semestre qui couvre le programme suivant:
Analyse lexicale, analyse syntaxique, analyse sémantique, environnement d'exécution, représentations intermédiaires, génération de code, allocation de registre, sélection et planification d'instructions, introduction aux optimisations de code local et global, analyse du flux de données
Ma question est la suivante: y a-t-il des sujets informatiques que je devrais connaître avant de suivre ce cours? Si oui, ce serait bien si vous pouviez énumérer ces cours.
la source
Réponses:
Vous devriez probablement avoir une compréhension simple des sujets suivants:
Facultatif, et aidera probablement beaucoup:
la source
Eh bien, j'ai fait un peu de travail pour écrire mes propres compilateurs, et je dirais que la principale condition préalable est une bonne compréhension des choses que vous obtiendrez dans une classe Data Structures. Plus précisément, si vous ne comprenez pas la récursivité, les arbres et les cartes / tables de hachage, vous allez vous perdre très rapidement en essayant d'apprendre à construire un compilateur.
la source
Vous allez avoir besoin de quelques informations de base sur l'architecture informatique (registres, mémoire, registres spéciaux, etc.) et vous avez déjà vu du code d'assemblage. Ce serait encore mieux si vous avez déjà écrit du code d'assemblage, vous avez donc une bonne compréhension du fonctionnement du langage machine.
Selon le niveau du cours, vous pouvez vous attendre à en savoir un peu plus sur le traitement superscalaire et similaires.
la source
Si cela ressemble à la classe de compilateurs que j'ai reprise à la fin du Crétacé (vers 1988), les seules véritables conditions préalables seraient les structures de données (arbres et tables de hachage en particulier), un langage d'assemblage (pour le code généré), peut-être une certaine architecture informatique, et quelle que soit la classe enseignerait des choses comme les expressions régulières, les automates finis, les machines de Turing, etc. bien que ceux-ci puissent être couverts dans le cadre du cours de compilation lui-même (FWIW, pas le mien). Vous devez également vous assurer que vous comprenez la récursivité.
la source
Vous devrez probablement suivre également un cours sur les modèles formels et les langues. Tout ce qui couvre la hiérarchie Chompsky de base serait bien: Langues régulières + Langues sans contexte. En effet, il est important de comprendre les fondements mathématiques de l'analyse afin que votre analyseur soit propre, performant et correct. Je pense qu'une bonne classe de compilateurs couvrira souvent les expressions régulières et les analyseurs LALR / LL (k) et la théorie qui les sous-tend.
la source
Puisqu'ils parlent d'optimisation de code, il est possible qu'il y ait un certain codage de langage d'assemblage. Il serait donc peut-être bon d'avoir au moins une familiarité passagère avec cela. Cela dépend de la façon dont ce cours spécifique est structuré. Sinon, le simple fait d'avoir un solide ensemble de compétences en programmation devrait suffire pour une introduction à la classe des compilateurs, je pense. Ce sera une classe très précieuse.
la source
Dépend de votre université mais la plupart nécessitent ces pré-requis:
la source