#  > Desenvolvimento >  > Linguagens de Programação >  >  Como criar linguagem de programação

## shinzo

Sempre tive essa dúvida. Já usei o google e não achei a resposta. Se alguém souber, me diz ai. Fiquei interessado nisso, quando conheci o projeto LUA, linguagem feita por brazucas.

----------


## achiodi

I rapaz. Contruir uma linguagem nao eh nada facil.
Aprendemos a fazer isso na faculdade.
Vais precisar ter conhecimento sobre pilhas, tokens, filas...
Tem um programa que ajuda vc a fazer o inicio.

----------


## shinzo

Isso no curso de Ciências da Computação ?

----------


## achiodi

sim, em ciencias da computacao.
Primeiro vc devera dominar uma linguagem. Com essa linguegem voce contruira se compilador.

----------


## achiodi

Meh... axo que to precisando treinar mais digitacao!
h\UHUhauHAU

----------


## shinzo

Interessante. Esquema é continuar estudando C e Phyton.

----------


## eyglys

> Isso no curso de Ciências da Computação ?


Faço Eng. de computação, e tenho uma noção sobre onde vc poderia começar a fazer sua linguagem de programação.

*1º passo:* Estruturas básicas: Pilhas, filas, árvores, grafos, etc ... (Vc pode achar conteúdo sobre isso, com o título: Estrutura de dados)

*2º passo:* Lógica aplicada a computação: Esse é o título sobre as apostilas que vc pode ir pesquisando (apenas depois de ter concluido ou estar estudando o 1º passo). Esse assunto irá dar muita ênfase sobre as linguagens formais, suas sintaxes, semânticas, computabilidade, etc. Esse segundo passo é EXTREMAMENTE importante, principalmente para construir um compilador descente.

*3º passo:* Programar bastante: Esse com certeza é o passo mais importante, não basta apenas estar muito bem nos passos anteriores, vc precisará dominar bastante a linguagem que o seu compilador será feito (recomendo uma linguagem compilada, como C/C++).[/b]

----------


## natascha

Mas pilhas, filas etc. não é construção de uma nova linguagem, é apenas lógica de programação, estrutura de dados..Eu aprendi isso na faculdade com linguagens já existentes, normalmente Pascal. Que eu saiba faculdade não ensina criar linguagem, ensina criar programas.

----------


## eyglys

> Mas pilhas, filas etc. não é construção de uma nova linguagem, é apenas lógica de programação, estrutura de dados..Eu aprendi isso na faculdade com linguagens já existentes, normalmente Pascal. Que eu saiba faculdade não ensina criar linguagem, ensina criar programas.


Natascha, pilhas, filas, árvores realmente são estruturas SIMPLES de dados, mas para construir qualquer programa (um compilador é um programa) vc precisa saber utilizar essas estruturas.

Sobre ensinar a fazer uma linguagem, infelizmente devo lhe falar que cursos de nível superior ensinam a construir linguagens de alto nível.

----------


## natascha

> Natascha, pilhas, filas, árvores realmente são estruturas SIMPLES de dados, mas para construir qualquer programa (um compilador é um programa) vc precisa saber utilizar essas estruturas.
> 
> Sobre ensinar a fazer uma linguagem, infelizmente devo lhe falar que cursos de nível superior ensinam a construir linguagens de alto nível.



Sou programadora, sei tudo isso. Acontece que na minha opinião há uma confusão aqui.....as faculdades ensinam a criar sistemas, programas, nunca ouvi falar de curso que ensina a criar linguagem, se aprende é a programar com as já existentes. Por exemplo, quando eu fiz faculdade, aprendi Pascal, C, Html, Asp, que são linguagens já criadas, ninguem me ensinou a criar uma nova, mas sim a utilizá-las.

----------


## 1c3m4n

existem cursos que ensinam criar "linguagens" sim, no curso de engenharia da minha faculade eles tem uma matéria chamada compiladores, onde eles tem que desenvolver um compilador novo, jah eh um belo começo para se criar a linguagem :P

----------


## edmafer

> existem cursos que ensinam criar "linguagens" sim, no curso de engenharia da minha faculade eles tem uma matéria chamada compiladores, onde eles tem que desenvolver um compilador novo, jah eh um belo começo para se criar a linguagem :P


Correto Ice!

Tudo que foi informado antes, como a Natascha disse, são estruturas, são formas de se tratar dados. E estas podem ser escritas em qualquer linguagem.

Para que vc possa criar uma nova linguagem, vc precisa conhecer bem uma linguagem, de preferência baixo nível, que se possa comunicar diretamente com o hardware (Assembly por exemplo), para você construir o compilador, ou interpretador, como for de sua preferência. Se não souber o que estou falando precisará estudar mais um pouco, mas se está aqui acredito que saiba.

Se vc for construir um interpretador, acredito que consiguirá fazer com a maioria das linguagens, pois ele somente terá que ler um arquivo e executar seus comandos de acordo com os códigos descritos neste arquivo.

Agora para você fazer um compilador, é mais complexo, precisará de conhecimente de nivel baixo, para poder trabalhar com hardware (não sei se é possível fazer isto, sem este conhecimento, me corrijam pessoal de Ciencias da Computação), ele vai ler um arquivo com a sua linguagem e a partir dele gerará um executável que possue código de máquina (simplificando o processo, estude sobre compilação que tem outros passos).

----------


## natascha

> Correto Ice!
> 
> Tudo que foi informado antes, como a Natascha disse, são estruturas, são formas de se tratar dados. E estas podem ser escritas em qualquer linguagem.
> 
> Para que vc possa criar uma nova linguagem, vc precisa conhecer bem uma linguagem, de preferência baixo nível, que se possa comunicar diretamente com o hardware (Assembly por exemplo), para você construir o compilador, ou interpretador, como for de sua preferência. Se não souber o que estou falando precisará estudar mais um pouco, mas se está aqui acredito que saiba.
> 
> Se vc for construir um interpretador, acredito que consiguirá fazer com a maioria das linguagens, pois ele somente terá que ler um arquivo e executar seus comandos de acordo com os códigos descritos neste arquivo.
> 
> Agora para você fazer um compilador, é mais complexo, precisará de conhecimente de nivel baixo, para poder trabalhar com hardware (não sei se é possível fazer isto, sem este conhecimento, me corrijam pessoal de Ciencias da Computação), ele vai ler um arquivo com a sua linguagem e a partir dele gerará um executável que possue código de máquina (simplificando o processo, estude sobre compilação que tem outros passos).



Ah ok. Agora compreendi, é que em Ciência da Computação, Analise de Sistemas e Sistemas de Informação, isso não é ensinado, aprende-se apenas as linguagens de alto nível. Acredito que apenas em Engenharia da Computação.

----------


## edmafer

> Ah ok. Agora compreendi, é que em Ciência da Computação, Analise de Sistemas e Sistemas de Informação, isso não é ensinado, aprende-se apenas as linguagens de alto nível. Acredito que apenas em Engenharia da Computação.


Natasha, eu acho que isto muda de acordo com a instituição. Aqui na minha cidade (Maringá-Pr) na UEM, no curso de Ciencias da Computação, eles possuem a matéria compiladores.

----------


## Tepes

Aqui no Rio Grande do Sul na UFSM tb tem a materia compiladores...

----------


## fabricio_

Ciencias da Computacao FEI - Compiladores!  :Big Grin:

----------


## PiTsA

no meu curso de Eng. da Computação eu tenho uma matéria "Tópicos de Computação I" onde basicamente é a matéria de compiladores.... tem muita, massss muita teoria por trás da criação de uma linguagem...

coisas do tipo: Alfabeto, Linguagem e Gramática , Análie Léxica, Autômatos com Pilha, Análise Sintática, Máquinas de Turing, etc....

----------


## maurelius

NATASHA,


Fiz Analise de Sistema, e no meu curso na matéria de Organização e Arquitetura de Computadores, tive aulas de linguagem de BAIXO NÍVEL (Assembly). O Edson foi CAMPEÃO!!! Para quem quer criar uma linguagem própria, tem que, antes ou depois de conhecer qualquer estrutura, conhecer uma linguagem de BAIXO NÍVEL, q na minha opinião é fácil, mas HIPER-TRABALHOSA, e pouco prática.

Agora, a pessoa tem saber se vale a pena, e qual a real finalidade, para ingressar nessa, senão é perder tempo.

FUI!!

----------


## natascha

Eu tive matéria de compiladores, mas nenhuma matéria ensinava linguagem de baixo nível e nem a criar linguagem..fiz Fatec.

e aqui na minha cidade, nas outras faculdade tbm não ensinam a criar linguagem...conheço pessoas de outros faculdades e nunca ouvi falar que ensinasse...bom...deve variar então....eu só usei linguagens já existentes...

algum de vcs chegaram a criar alguma linguagem?

----------


## edmafer

Valeu Maurelius!

Eu curso Sistemas de Informação no Cesumar, então só vejo linguagens mais comerciais, e básico de C em Estrutura de dados.

O pouco que sei aprendi pela curiosidade.

----------


## poleto

Acredito que a matéria de compiladores esteja incluída nos curriculums da maioria dos cursos de graduação plena (os que duram 4 anos, ainda não vi curso de tecnólogo - em geral 3 anos - com essa disciplina), e *geralmente* o que se aprende é a criar um compilador para uma linguagem já existente, e não desenvolver a linguagem propriamente dita (apesar de que são visto coisas como alfabeto e linguagens; gramáticas; automatos finitos e linguagens regulares; etc.). Já vi o caso de um professor que já tinha desenvolvildo uma linguagem e o que os alunos fizeram foi criar um compilador para esta linguagem, mas claro que isso vai variar de uma instituição para outra.

----------


## natascha

> Acredito que a matéria de compiladores esteja incluída nos curriculums da maioria dos cursos de graduação plena (os que duram 4 anos, ainda não vi curso de tecnólogo - em geral 3 anos - com essa disciplina), e *geralmente* o que se aprende é a criar um compilador para uma linguagem já existente, e não desenvolver a linguagem propriamente dita (apesar de que são visto coisas como alfabeto e linguagens; gramáticas; automatos finitos e linguagens regulares; etc.). Já vi o caso de um professor que já tinha desenvolvildo uma linguagem e o que os alunos fizeram foi criar um compilador para esta linguagem, mas claro que isso vai variar de uma instituição para outra.


*
Eu tbm acho!!* 8)

----------


## eyglys

> Agora para você fazer um compilador, é mais complexo, precisará de conhecimente de nivel baixo, para poder trabalhar com hardware (não sei se é possível fazer isto, sem este conhecimento, me corrijam pessoal de Ciencias da Computação), ele vai ler um arquivo com a sua linguagem e a partir dele gerará um executável que possue código de máquina (simplificando o processo, estude sobre compilação que tem outros passos).


edmafer, um compilador e um interpretador são quase idênticos a grande diferença está em que um vai executando as instruções e o outro vai transformando o código em um código objeto.

Ao contrário do que muitos pensam, o compilador não gera um código de máquina (código de máquina, é um código entendível pelo nível mais baixo, o hardware), eles geram um código compreensível pelo sistema operacional (por isso um aplicativo de um sistema operacional dificilmente funcionará em outro, a menos que a API de instruções de SO fornecida, seja EXATAMENTE a mesma).

Respondendo a alguns questionamentos de natasha:
Como já foi explicado, cursos superiores ensinam sim a fazer linguagens de programação, e a disciplina mais básica disso seria arquitetura de computadores (dá uma noção do funcionamento do computador e como as linguagens são entendidas pelo hardware) e compiladores. É obvio que existe muita coisa adiante de compiladores, que é plenamente possível ser abordado em um curso superior.

Faço Eng. de computação e essas disciplinas básicas, para se criar uma linguagem são ministradas na minha instituição pública.

----------


## eyglys

> Acredito que a matéria de compiladores esteja incluída nos curriculums da maioria dos cursos de graduação plena (os que duram 4 anos, ainda não vi curso de tecnólogo - em geral 3 anos - com essa disciplina), e *geralmente* o que se aprende é a criar um compilador para uma linguagem já existente, e não desenvolver a linguagem propriamente dita (apesar de que são visto coisas como alfabeto e linguagens; gramáticas; automatos finitos e linguagens regulares; etc.). Já vi o caso de um professor que já tinha desenvolvildo uma linguagem e o que os alunos fizeram foi criar um compilador para esta linguagem, mas claro que isso vai variar de uma instituição para outra.


Isso realmente varia de cada instituição. Na minha, tivemos que fazer uma máquina virtual com um compilador de assembly na disciplina mais básica sobre o assunto.

----------


## eyglys

> no meu curso de Eng. da Computação eu tenho uma matéria "Tópicos de Computação I" onde basicamente é a matéria de compiladores.... tem muita, massss muita teoria por trás da criação de uma linguagem...
> 
> coisas do tipo: Alfabeto, Linguagem e Gramática , Análie Léxica, Autômatos com Pilha, Análise Sintática, Máquinas de Turing, etc....


Vc tem razão em dizer que por trás de uma linguagem existe Alfabeto, linguagem, semântica (análise sintática), etc (só deixaria a parte a máquina de Turing, pois é uma história bem longa, e só teria importância para intusiastas da computação).

Foi levando em consideração esses tópicos, que eu falei no inicio de todas as msg, que era bastante importante saber lógica (entendam lógica, como um conjunto de regras, e toda uma teoria baseada em conjuntos ou não, para formar um raciocinio VÁLIDO).

----------


## cag

Hoje em dia muda muito de uma faculdade para outra...

Aqui na minha cidade o curso de engenharia elétrica tem uma matéria que ensina forth e assembly.

----------


## natascha

esse negócio de matéria + básica depende do curso. 
não são todos relacionados a informatica que tem isso no cronograma. processamento de dados e analise de sistemas não ensinam a criar linguagem. e é óbvio que em eng. da computação deve ter algo do tipo.

ninguem daqui do fórum chegou a desenvolver alguma?

----------


## ruyneto

Natascha seguinte eu faço ciencias da computação e aqui eu tenho assembly, linguagens formais, e compiladores, a ideia é que apos isso voce tenha a base para montar sua propria linguagem, já que ja tem a ideia de como se cria um compilador ( passo essencial pra se ter uma linguagem) e de como fazer esse compilador passar informações para o sistema direto, alem do funcionamento das gramáticas que da a base teórica do compilador.

Bom é isso, depois disso eh so o cara se esforçar que consegue definir um compilador e as estruturas da sua linguagem, mas o trabalho é mto grande para fazer a linguagem.

falows

----------


## smvda

> esse negócio de matéria + básica depende do curso. 
> não são todos relacionados a informatica que tem isso no cronograma. processamento de dados e analise de sistemas não ensinam a criar linguagem. e é óbvio que em eng. da computação deve ter algo do tipo.
> 
> ninguem daqui do fórum chegou a desenvolver alguma?


Eu faço ciencias da computação e tive dois modulos de compiladores ... cheguei a desenvolver parte da linguagem que era o analizador sintatico .... mas após isso tem varias outras coisas que se deve abordar .... o lance que se é muito complicado desenvolver uma linguagem sózinho alem de levar muito tempo e ter pouco retorno ... ao menos que vc precise de uma nova linguagem para efetuar tais procedimentos ... ai sim se tem um objetivo e com certeza ela ira vingar ... mas no meio academico foi muito mais para conhecimento e teoria mesmo .

----------


## helensurf

Eu fiz Tecnologia em Processamento de Dados e digo a mesma coisa que a Natascha... na minha faculdade aprendi Pascal, Java, Asp, Delphi e C++... agora ensinar a montar uma linguagem não...
Interessante isso...
E mesmo em outras faculdade não tinha visto a matéria compiladores :? ...

Mas deve ser muito bacana... apesar de eu não gostar muito de programar...rsrsrs...

----------


## ruyneto

> Postado originalmente por natascha
> 
> esse negócio de matéria + básica depende do curso. 
> não são todos relacionados a informatica que tem isso no cronograma. processamento de dados e analise de sistemas não ensinam a criar linguagem. e é óbvio que em eng. da computação deve ter algo do tipo.
> 
> ninguem daqui do fórum chegou a desenvolver alguma?
> 
> 
> Eu faço ciencias da computação e tive dois modulos de compiladores ... cheguei a desenvolver parte da linguagem que era o analizador sintatico .... mas após isso tem varias outras coisas que se deve abordar .... o lance que se é muito complicado desenvolver uma linguagem sózinho alem de levar muito tempo e ter pouco retorno ... ao menos que vc precise de uma nova linguagem para efetuar tais procedimentos ... ai sim se tem um objetivo e com certeza ela ira vingar ... mas no meio academico foi muito mais para conhecimento e teoria mesmo .



Eh cara na minha facul tb tem de fazer um analisador so que o semantico se nao me engano .

falows

----------

