Quais disciplinas de ciência da computação são obrigadas a seguir o curso introdutório de compiladores? [fechadas]

10

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.

stressed_geek
fonte
11
Depende da sua escola. A minha não era tão difícil, então os pré-requisitos eram estruturas básicas de dados e algoritmos básicos - isso é tudo. Infelizmente, eles tornaram os compiladores opcionais e eu pensei e não aceitei.
Job

Respostas:

8

Você provavelmente deve ter um entendimento simples dos seguintes tópicos:

  • Matemática Discreta (conjuntos, relações, árvores, gráficos, matrizes, teoria dos números)
  • Estruturas de dados (em um sentido mais aplicado, como árvores, listas, pilhas, filas e seqüências de caracteres funcionam)
  • Algoritmos básicos (conceitos principais, classificação, pesquisa, notação Big-O, etc)
  • Arquitetura de computadores (lógica digital, operações de bits, microcomponentes, cache, memória, programação de montagem)
  • Diversos (expressões regulares, linguagens livres de contexto, autômatos de estado finito / pushdown, máquinas de Turing e computabilidade, ferramentas lexicais e de análise)

Opcional e provavelmente ajudará bastante:

  • Design do sistema operacional (gerenciamento de processos, design do kernel, sincronização, agendamento, eventos, bloqueios, threads e pilha versus pilha)
Pewpewarrows
fonte
4

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.

Mason Wheeler
fonte
3

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.

Peter Smith
fonte
11
Isso só é verdade se assumirmos que o compilador em questão está gerando código de máquina e não algum tipo de bytecode.
Mason Wheeler
3

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.

John Bode
fonte
2

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.

Mark Pauley
fonte
0

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.

GrandmasterB
fonte
0

Depende da sua unidade, mas a maioria exige estes pré-requisitos:

=> Discrete Mathematics
Should include: propositional logic, predicate logic, set theory etc etc 

=> General Concepts of Programming (In any language of choice would be okay)
=> Algorithms and Data Structures
Should include: data structures, abstract data types, recursive algorithms
rrazd
fonte