• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

the_street_racer

Criar uma liguagem de programação Script interpretada por JAVA

30 mensagens neste tópico

Olá a todos,

estou com um novo projecto, que é para me ajudar a aprender/aprofundar em JAVA. O projecto até esta apresentado aqui no P@P aqui: http://www.portugal-a-programar.pt/index.php?showtopic=25540

E o que eu queria fazer, era criar uma linguagem script, que depois criava o interpretador em JAVA. Será isso possível? Se for é mais ou menos fácil?

Em minha ideia era criar uma linguagem de programação fácil baseada em BASIC.

Queria as vossas opiniões, sugestões, perguntas...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Possível é, facil é que não necessariamente.

Pessoalmente não tenho conhecimentos teóricos (nem praticos na verdade) para criar uma linguagem de programação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas criar uma linguagem script, será a maneira mais fácil de se criar uma linguagem escrita em JAVA?

O objectivo é criar uma linguagem muito simples e fácil de usar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi a parte onde o Java entra.

Tipo o Virtual Machine do Java é feito em C ou C++. E eu queria criar uma linguagem de programação, em que o java interpretava a linha de código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que queres já existe :) a mais usada é http://groovy.codehaus.org/ depois para quem programa python e ruby tens http://www.jython.org/Project/ , http://jruby.codehaus.org/

Por acaso não conhecia... Só conhecia era o jython. Mas o que eu quero é criar a minha própria linguagem, mas tou a ver que vou tirar muitas ideias do Groovy.

A minha ideia é criar uma linguagem de programação que a principio será interpretada (script - que acho a maneira mais fácil de criar uma linguagem), num programa que estou a criar em java, que basicamente emula um PC  que tem uma linha de comandos criada por mim tb (Street Racer Command Line), que para adicionar mais funcionalidades ao command line e para que todos possam criar os seus próprios programas, numa programação fácil e simples.

É mais ou menos a minha ideia... é claro que estou a espera das vossas sugestões, que ainda ninguém me disse nada.

Link do projecto no P@P: http://www.portugal-a-programar.pt/index.php?showtopic=25540

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se percebi bem, queres criar um interpretador em JAVA para a tua linguagem.

É possível, a complexidade varia conforme a linguagem que queres implementar.

Mas JAVA acho que seria das últimas linguagens que escolheria para fazer uma linguagem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas JAVA acho que seria das últimas linguagens que escolheria para fazer uma linguagem.

Porque dizes isso?

Eu já conheço algumas linguagens (Pascal, Visual Basic 6, PHP, C, AutoIT) e o JAVA para mim foi o mais interessante (posso admitir que também foi um pouco difícil de aprender, devido a estar habituado a linguagens procedimentares, e ainda me custou a entrar em linguagem orientada a objectos), pois com ele podes fazer tudo (para o que eu quero faz), está sempre em crescimento (já agora posso dizer que o swing vai desaparecer, e vai passar para o JavaFX), escreves 1 vez e ficas disponível para qualquer S.O., e ainda o melhor é que tens uma API gigantesca para usar e abusar, e é isso que "acho" que me irá ajudar e bastante a criar uma linguagem simples, pois basta aceder ao API.

Mas é claro quero as vossas opiniões, pois nunca fiz isto, nem se quer comecei.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
(já agora posso dizer que o swing vai desaparecer, e vai passar para o JavaFX)

:) JavaFX é Swing, se o Swing desaparece o JavaFX também :).

Quanto à questão de fazeres uma linguagem de script usando Java. Dependerá do tipo de linguagem que quiseres usar, existem já várias bibliotecas que tornam isso simples, por exemplo, adicionar uma linguagem nova ao NetBeans IDE é coisa para demorar algumas horas, isto porque este possuí uma biblioteca que permite criar parsers rapidamente. Esta é apenas uma vertente da criação da uma linguagem, fazer parsing de vários tokens que constituem a linguagem. Claro que noutras linguagem existem bibliotecas similares

A parte de execução de determinados comandos é que poderá ser mais complexa, consoante a necessidade de interacção que tens.

Portanto fazer uma linguagem de scripting usando Java é possível, bem possível olhando para a miríade de linguagens que correm em Java, com implementações de Python, Javascript, o Groovy já mencionado, JavaFX, enfim a lista é grande e mostra que é uma linguagem onde podes criar o que pretendes.

A partir da versão 5 do Java tens até suporte nativo para motores de scripting, que podem ser adicionados à platforma de forma simples.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é preciso repetir as mensagens ;)

Podes ver mais, por exemplo em http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/, mas existem mais recursos na web. A versão 6 já tem um motor de scripting que suporta javascript, e criar novos motores é relativamente simples usando o conjunto de classes que foi adicionado.

Edit:

Este artigo pode dar uma ideia simples de como usar javascript: http://blogs.averconsulting.com/2006/11/09/java-6--javascript-support.aspx

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado!

Já dei uma vista de olhos, mas vou ver com mais detalhe sobre isto!

Thanks a lot! ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Mas JAVA acho que seria das últimas linguagens que escolheria para fazer uma linguagem.

Então qual era a primeira? C?

Só porque toda a gente escreve compiladores e interpretadores em C, isso não quer dizer que seja a opção ideal.

escreves 1 vez e ficas disponível para qualquer S.O.,

The_street_racer, não vás em conversas de publicitário. A portabilidade não foi uma ideia inventada pela Sun em 1995.

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ou também podes escrever um interpretador em Java para a linguagem.

Eu acho que é esta opção que ele quer.

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou também podes escrever um interpretador em Java para a linguagem.

Eu acho que é esta opção que ele quer.

JJ

Exacto, é eu escrever o interpretador (o meu programa lê o código e ele executa), pois acho a maneira mais fácil de se criar uma linguagem... Não sei por isso é que estou a pedir as vossas opiniões.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então qual era a primeira? C?

Só porque toda a gente escreve compiladores e interpretadores em C, isso não quer dizer que seja a opção ideal.

Heck no. C ainda seria pior que Java.

As melhores seriam obviamente uma linguagem funcional, a filosofia delas encaixa naturalmente no processamento de um compilador/interpretador, por alguma coisa é normal haver tutoriais dessas linguagens em que o próprio tutorial é criar um interpretador. Portanto se calhar a primeira escolha seria Haskell visto ser essa a minha linguagem de eleição nesse paradigma. Lisp também seria uma boa escolha, até Scala seria provavelmente uma melhor escolha que Java, (digo provavelmente porque não conheço bem a linguagem, só das características da mesma). Python ou Ruby também seriam umas boas hipóteses.

the_street_racer, sim opta por um interpretador. Para o que tu queres é o mais indicado e também o mais simples. No inicio pensa bem na sintaxe e semântica que queres dar à tua linguagem. Se depois no futuro quiseres mudar/alterar/adicionar algo, essas áreas normalmente são as mais complicadas, já que muitas vezes envolvem uma reestruturação de toda a linguagem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No inicio pensa bem na sintaxe e semântica que queres dar à tua linguagem. Se depois no futuro quiseres mudar/alterar/adicionar algo, essas áreas normalmente são as mais complicadas, já que muitas vezes envolvem uma reestruturação de toda a linguagem.

Pois é... Também já pensei nisso, pois se alterar vai dar uma trabalheira, é como o exemplo do PHP... As alterações feitas já nem tem conta...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Heck no. C ainda seria pior que Java.

A verdade é que o C é uma linguagem de nível relativamente baixo. Portanto, usar uma linguagem que não o C para escrever um compilador pode ser bom, até porque os compiladores geralmente envolvem muitos conceitos e muita modularidade.

Não se trata de escrever em C ser "pior" do que escrever em Java. A questão é mais que ambas as linguagens funcionam. Portanto, porquê utilizar uma linguagem tão rudimentar como o C, quando se podia tirar partido de mais e melhores abstracções?

As melhores seriam obviamente uma linguagem funcional, a filosofia delas encaixa naturalmente no processamento de um compilador/interpretador, por alguma coisa é normal haver tutoriais dessas linguagens em que o próprio tutorial é criar um interpretador. Portanto se calhar a primeira escolha seria Haskell visto ser essa a minha linguagem de eleição nesse paradigma. Lisp também seria uma boa escolha, até Scala seria provavelmente uma melhor escolha que Java, (digo provavelmente porque não conheço bem a linguagem, só das características da mesma). Python ou Ruby também seriam umas boas hipóteses.

Depende.

Olha, se escreveres um compilador com programação funcional, ficas com uma grande salganhada, porque tens de gerar labels diferentes umas das outras (e isso geralmente implica passares um argumento extra a todas as funções do gerador de código). Tirando isso, e o código ficar uma massa disforme impossível de manter, não apresenta problema nenhum (até porque essa é uma característica típica de qualquer programa completamente funcional).

Para escreveres um interpretador, uma linguagem funcional pode ser boa ideia, mas só se a linguagem que estás a interpretar for também funcional. Caso contrário, precisas de meter coisas não funcionais no interpretador, o interpretador deixa de ser funcional.

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A verdade é que o C é uma linguagem de nível relativamente baixo. Portanto, usar uma linguagem que não o C para escrever um compilador pode ser bom, até porque os compiladores geralmente envolvem muitos conceitos e muita modularidade.

Não se trata de escrever em C ser "pior" do que escrever em Java. A questão é mais que ambas as linguagens funcionam. Portanto, porquê utilizar uma linguagem tão rudimentar como o C, quando se podia tirar partido de mais e melhores abstracções?

Claro, por isso é que disse que C era pior que Java. E é exactamente pelo mesmo motivo que Java também não é a melhor opção...

Depende.

Olha, se escreveres um compilador com programação funcional, ficas com uma grande salganhada, porque tens de gerar labels diferentes umas das outras (e isso geralmente implica passares um argumento extra a todas as funções do gerador de código). Tirando isso, e o código ficar uma massa disforme impossível de manter, não apresenta problema nenhum (até porque essa é uma característica típica de qualquer programa completamente funcional).

Não percebi, estás a dizer que programar funcionalmente é uma grande salganhada?

Para escreveres um interpretador, uma linguagem funcional pode ser boa ideia, mas só se a linguagem que estás a interpretar for também funcional. Caso contrário, precisas de meter coisas não funcionais no interpretador, o interpretador deixa de ser funcional.

Isso não tem lógica nenhuma. Podes perfeitamente usar uma linguagem funcional para fazer um compilador/interpretador de uma linguagem não funcional.

PS: Penso que já nos estamos a afastar do tópico...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
E é exactamente pelo mesmo motivo que Java também não é a melhor opção...

Mas o Java é uma boa linguagem para programas que envolvem muitos conceitos.

Não percebi, estás a dizer que programar funcionalmente é uma grande salganhada?

E não é?

Onde está a modularidade?

Onde está a facilidade de manutenção do código?

Isso não tem lógica nenhuma. Podes perfeitamente usar uma linguagem funcional para fazer um compilador/interpretador de uma linguagem não funcional.

É? Então como é que tu interpretas uma instrução de IO numa linguagem puramente funcional, se não podes fazer IO de forma puramente funcional?

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas o Java é uma boa linguagem para programas que envolvem muitos conceitos.

Claro que é. Eu não disse o contrário. C também é uma boa linguagem. No entanto não invalida que haja melhores e Java não prime por ser moderna. Nem na altura da sua criação quanto mais passado 1 década.

E não é?

Onde está a modularidade?

Onde está a facilidade de manutenção do código?

Isso não é problema da linguagem, isso é incompetencia do programador. Maus programadores há em todas as linguagens. É o programador que poem o código modular ou não, que o torne fácil de manter ou não.

É? Então como é que tu interpretas uma instrução de IO numa linguagem puramente funcional, se não podes fazer IO de forma puramente funcional?

?!? Sinceramente não compreendo o que queres dizer.

Uma pessoa interpreta uma instrução IO como outra instrução qualquer. Se é IO ou não pouco interessa, vai ter sempre uma acção mapeada à essa instrução, que terá já sido previamente "digerida" para uma AST e devidamente validada. Se estás a usar uma linguagem puramente funcional para elaborar o interpretador a única restrição que tens é que essas acções mapeadas terão que ser do mesmo "tipo".

Se não acreditas que é possível podes sempre ir pesquisar por Pugs, que é um dos major interpretadores/compiladores para Perl6 feito em Haskell, ou seja feito numa linguagem puramente funcional para uma linguagem longe de ser funcional para não falar em pura.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Isso não é problema da linguagem, isso é incompetencia do programador. Maus programadores há em todas as linguagens. É o programador que poem o código modular ou não, que o torne fácil de manter ou não.

Pode também ser problema da linguagem.

Para mim, uma linguagem que te obriga a alterar a assinatura de 50 mil funções só para adicionar um contador não encaixa na minha definição de linguagem que favorece a modularidade.

Para favorecer a modularidade e o desenvolvimento incremental, uma linguagem tem que te permitir adicionar funcionalidades introduzindo código novo, e não alterando o código já feito (se for mesmo preciso, então que seja o mínimo possível).

Uma pessoa interpreta uma instrução IO como outra instrução qualquer. Se é IO ou não pouco interessa, vai ter sempre uma acção mapeada à essa instrução,

O problema é que quando programas de forma puramente funcional, não existem "acções", só expressões.

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pode também ser problema da linguagem.

Para mim, uma linguagem que te obriga a alterar a assinatura de 50 mil funções só para adicionar um contador não encaixa na minha definição de linguagem que favorece a modularidade.

Para favorecer a modularidade e o desenvolvimento incremental, uma linguagem tem que te permitir adicionar funcionalidades introduzindo código novo, e não alterando o código já feito (se for mesmo preciso, então que seja o mínimo possível).

Isso nunca irá ser problema da linguagem. Não há forma de uma linguagem limitar nesse departamento a estupidez humana. Se eu em Java puser 50 mil funções a trabalhar com um contador int, e depois me lembrar que int não serve e tem de ser float e lá vou ter de alterar as 50 mil funções. Isto é a linguagem ser estúpida? Nops, é o programador ser estúpido por 2 motivos.

1 - Não pensou o suficiente no inicio

2 - Não delineou a solução de modo a poder introduzir mudanças/introduções ao nível do contador. Fixou-o no código.

Não há linguagem do mundo que pode impedir estes casos. A única hipótese mesmo é o programador ter melhor formação...

O problema é que quando programas de forma puramente funcional, não existem "acções", só expressões.
Sim e? Primeiro uma acção pode ser representada por uma expressão. Se tal não fosse possível era impossível haver IO em linguagens funcionais puras, o que há. Segundo, o que raio tem uma coisa haver com outra? Como as instruções IO são interpretadas pela linguagem que tou a usar tem haver com as instruções da linguagem que estou a desenvolver? Daqui a pouco também vais dizer que é impossível desenvolver um interpretador/compilador de uma linguagem funcional em C, porque C não é funcional e puro.

Chegaste a ver o Pugs? É que é o suficiente para verificar que é possível elaborar numa linguagem funcional um interpretador/compilador para uma linguagem procedimental.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já vi que houve para aqui uma discussão acesa, o que posso dizer é cada tipo de linguagem tem SEMPRE as suas vantagens e desvantagens.

Eu como comecei há pouco no Java como linguagem orientada a objectos, para já ainda gosto mais de uma linguagem procedimental (sei VB6, PHP, C). E claro como todas as linguagens, tem a sua desvantagem principalmente em projectos grandes, a sua manutenção, que poderá ficar um pouco de "salganhada" ao longo do tempo, mesmo que se ponha sempre um pouco de organização. Mas claro também se o programador fizer uma grande estupidez como o que já foi exemplificado, a culpa é mais do programador do que a própria linguagem (claro que a linguagem, pode ter alguma), mas com a experiência que tenho como programador aprende-se é com os erros.

Quanto ao que se estava inicialmente a falar no tópico, em principio irei fazer uma linguagem procedimental, pois será em como base principal da linguagem BASIC.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora