Sou graduado em ciência da computação e trabalho como desenvolvedor web (java, python, AS3 etc.) como profissional. Eu faço um curso por semestre na minha universidade local. Eu havia estudado Inteligência Artificial (compreendendo lógica, gramática livre de contexto, análise de CYK, PNL introdutória, cadeias de markov, HMM etc.) no último semestre.
Estou planejando fazer um curso introdutório de compiladores no próximo semestre, que abrange os seguintes conteúdos programáticos:
Análise Lexical, Análise de Sintaxe, Análise Semântica, Ambiente de Tempo de Execução, Representações Intermediárias, Geração de Código, Alocação de Registros, Seleção e Programação de Instruções, Introdução às Otimizações Locais e Globais de Código, Análise de Fluxo de Dados
Minha pergunta é: existem disciplinas de ciência da computação que eu deva conhecer antes de fazer este curso? Se sim, seria ótimo se você pudesse listar esses cursos.
fonte
Respostas:
Você provavelmente deve ter um entendimento simples dos seguintes tópicos:
Opcional e provavelmente ajudará bastante:
fonte
Bem, eu trabalhei um pouco escrevendo meus próprios compiladores e diria que o principal pré-requisito é uma sólida compreensão das coisas que você obterá em uma classe de estruturas de dados. Especificamente, se você não entender recursão, árvores e mapas / tabelas de hash, se perderá muito rapidamente tentando aprender a construir um compilador.
fonte
Você precisará de alguns conhecimentos básicos sobre arquitetura de computadores (registros, memória, registros de finalidade especial, etc.) e já viu algum código de montagem antes. Seria ainda melhor se você já escreveu algum código de montagem antes, para ter um entendimento justo de como a linguagem de máquina funciona.
Dependendo do nível do curso, pode-se esperar que você conheça um pouco sobre o processamento superescalar e similares.
fonte
Se isso é algo parecido com a classe de compiladores que retirei no final do Cretáceo (ca. 1988), os únicos pré-requisitos reais seriam estruturas de dados (especialmente árvores e tabelas de hash), alguma linguagem assembly (para o código gerado), possivelmente alguma arquitetura de computadores e qualquer classe ensinaria coisas como expressões regulares, autômatos finitos, máquinas de Turing etc., embora essas possam ser abordadas como parte do próprio curso do compilador (FWIW, a minha não). Você também deve ter certeza de entender a recursão.
fonte
Você provavelmente precisará fazer um curso sobre modelos e idiomas formais também. Qualquer coisa que cubra a hierarquia básica de Chompsky seria boa: idiomas regulares + idiomas livres de contexto. Isso ocorre porque é importante entender os fundamentos matemáticos da análise para que seu analisador esteja limpo, com bom desempenho e correto. Penso que uma boa classe de compiladores geralmente cobre tanto os Analisadores de Expressões Regulares quanto os LALR / LL (k) e a teoria por trás deles.
fonte
Como eles estão falando sobre otimização de código, é possível que haja alguma codificação de linguagem de montagem lá. Portanto, pode ser bom ter uma familiaridade passageira com isso, pelo menos. Depende de como esse curso específico é estruturado. Caso contrário, apenas ter um forte conjunto de habilidades de programação deve ser suficiente para uma introdução à classe de compiladores, eu pensaria. Será uma aula muito valiosa.
fonte
Depende da sua unidade, mas a maioria exige estes pré-requisitos:
fonte