Compiladores

simaor

Power Member
Eu não sei se esta pergunta é estupida, mas eu no outro dia fiquei a pensar (como não entendo nada disto) como são compilados os compiladores? Os compiladores transformam as varias linguagens em linguagem maquina né? Os gajos que fazem os compiladores fazem em linguagem maquina?
 
Depende. Actualmente, já é possível fazer compiladores na sua própria linguagem (só conheço o caso do Lisp...), mas, por exemplo, em C, acho que os compiladores são todos em assembly.
 
O devcpp é feito em delphi :D

E sim o assunto também me come a cabeça...o que nasceu 1º? O compilador ou o compilador? MUAH AH AH

Prefiro não pensar nisso e move on :D
 
É utilizado um compilador para compiladores...

O primeiro compilador foi feito em assembly, este apenas é interpretado nao compilado...
 
Ragnarok disse:
Depende. Actualmente, já é possível fazer compiladores na sua própria linguagem (só conheço o caso do Lisp...),

O LISP não é uma linguagem interpretada?? :P (isso significa que não é compilada)
 
Eu tambem já tinha andado a pensar nisso.....é como a história do ovo e da galinha....só que desta vez temos factos que comprovam que houve uma linguagem qualquer que fez o primeiro compilador....Mas que é que compilou essa linguagem? e que linguagem foi utilizada para escrever o compilador que compilou essa linguagem?

Weird....
 
Pa ... basicamente, primeiro tens um analisador lexical (lex ou flex por exemplo), dp tens um sintatico (yacc, byacc ou bison), dp crias uma arvore semantica e vais gerando o codigo em assembly. Dp o teu loader (LD) linka tudo e tens o compilador :D
 
Um compilador pode ser feito numa linguagem de programação normal como o C, Pascal, etc...
O primeiro compilador é que teve de ser feito em assembly.

Aproveitando a explicação do Madril, tens esta linha de código:

int a = 0;

O analisador lexical divide as palavras em tokens (ou seja faz em cada elemento do código atribui uma designação).

int -> TIPO_INT
a -> VARIAVEL
= -> ATRIBUIÇÃO
0 -> ESCALAR_INTEIRO

Um analisador semantivo constroi uma árvore através de regras:

TIPO VARIAVEL ATRIBUIÇÃO ESCALAR: (entao a arvore vai ficar assim)

DECLARACAO_ATRIBUICAO
|
-> TIPO_INT
|
-> VARIAVEL
|
-> ESCALAR_INTEIRO

Depois é gerado o código assembly através desta árvore
 
Madril disse:
Pa ... basicamente, primeiro tens um analisador lexical (lex ou flex por exemplo), dp tens um sintatico (yacc, byacc ou bison), dp crias uma arvore semantica e vais gerando o codigo em assembly. Dp o teu loader (LD) linka tudo e tens o compilador :D

Ora nem mais...

Esta é uma questão que não pode ser respondida sem que a pessoa tenha um background de informação já bastante evoluido. A tua resposta está bastante correcta!

Para quem não percebeu a resposta do Madril:
Um compilador não é feito como os outros programas em que "bates" código e depois compilas. Existe um outro caminho a percorrer, no qual 90% do tempo é na definição teórica da linguagem. Depois de definida a linguagem ficas com um dicionário de keywords e um conjunto de regras (lógicas) que ira tudo alimentar os "compiladores de compiladores" para ser mais fácil de perceberem.

Para dár um exemplo fácil imagina que defines na tua linguagem a operação de soma, e lhe atribuiz a keyword "+".. podia ser outra como "soma", mas assumimos que é a normal "+".
Terás de definir várias coisas, nomeadamente que existe um operadorando antes e outro depois da keyword: operadorandoA "+" operadorandoB. É nesta parte q se começa a definir a lógica para as keywords. Só mais tarde é que se define o "comportamento" da keyword.

Como podem ver o processo nada tem a ver com programação normal.
 
Ora nem mais...

Esta é uma questão que não pode ser respondida sem que a pessoa tenha um background de informação já bastante evoluido. A tua resposta está bastante correcta!

Ter uma cadeira chamada compiladores este semestre ajuda um bocado ;)
 
Obrigadão a todos pela informação.....já era um assunto que eu tentava descobrir por mim mesmo e através de pesquisas e bada conseguia apanhar acerca disso...

Cumps
 
Back
Topo