Com que idioma os compiladores são escritos?

7

Os compiladores são escritos em idiomas diferentes da linguagem que compilam?

    
por the0roamer 29.04.2010 / 23:30

4 respostas

16

Existem três linguagens envolvidas em um compilador: a linguagem que está sendo compilada (linguagem de origem), a linguagem que está sendo compilada (linguagem de destino) e a linguagem na qual o compilador é escrito (linguagem de implementação). Em geral, a linguagem de implementação é uma linguagem de propósito geral, como C ou C ++, ou o idioma de origem . O idioma de destino pode ser algum idioma adequado próximo ao idioma de origem que já existe ou assembly. Às vezes, há um idioma intermediário personalizado, para que possa haver um back-end comum para vários idiomas. É assim que o gcc funciona. Existe um front-end para C, C ++, Fortran, Ada e provavelmente outros. Cada um é compilado na mesma linguagem intermediária, que é então compilada na linguagem de montagem específica da arquitetura.

Se o compilador é escrito na mesma linguagem que está compilando, o compilador é chamado de auto-hospedagem . Se uma linguagem é nova, então nenhum compilador já existe, o que significa que seu primeiro compilador não pode ser auto-hospedável (caso contrário, como esse primeiro compilador seria compilado?). Como resultado, a primeira iteração de qualquer compilador para um novo idioma é sempre escrita em um idioma diferente. Dito isto, uma auto-hospedagem é mais conveniente; o (s) autor (es) só precisa ser proficiente em um idioma.

    
por 29.04.2010 / 23:52
3

Você pode escrever um compilador em, teoricamente, qualquer idioma. Até mesmo aquele que você está compilando .

    
por 29.04.2010 / 23:34
1

Há muito mais informações sobre isso em estouro de pilha , como Qual é a melhor linguagem para escrever um compilador? .

Mais relacionado em SO

Eu sei que as perguntas são movidas aqui do Stack Overflow, mas não sei se funciona ao contrário também.

    
por 30.04.2010 / 17:46
0

De um pequeno estudo que fiz há alguns anos (2010):

  • Ocaml ocaml:
    analisador: (o) caml
    core: C
  • C ++ g ++:
    analisador: C
    core: C (agora c ++) - > cedo gerado com bison então escrito à mão
  • D dmd:
    analisador: C
    core: C
  • Haskell GHC:
    parser: haskell (+ C)
    core: Haskell
    - > antigamente em LML
  • C gcc:
    analisador: C
    core: C
    - > anteriormente BCPL / asm
  • SmallTalk :
    SmallTalk
  • Lisp :
    Lisp
por 16.06.2014 / 15:27