Criar uma mini-linguagem de Programação[RESOLVIDO]

[size=16]Olá galera do guj,

Estou desenvolvendo uma ferramenta baseada no JasperReports em PHP, e preciso criar uma mini-linguagem de programação para executar as expressões feitas em java, como não fiz a matéria de Compiladores e na grade do meu curso da facul não tem mais, gostaria de algumas dicas de vcs…
Se alguém já tiver feito qualquer tipo de linguagem de programação idependente da linguagem, até o meu xodó C++, pode postar, fico muito grato.
Aqui no trampo falaram pra mim usar o design pattern interpreter, mas acho que num vai atender muito.

Se tiverem tutoriais ou apostilas, favor me enviar, não vou ter que fazer a linguagem completa, só o que é mais usado para gerar relatórios ou gráficos, subrelatórios, cubo e etc., entende?

Valeu galera…
[/size]

:slight_smile:

Não sei se você conhece o CajuScript, é leve, e fácil de usar, e podes customizar a sintaxe, pega o código do SVN e compila, tem algumas melhorias. www.cajuscript.org

Tem um startup rápido e leve, e um tempo de execução bastante rápido.

Acho que desenvolver algo de raiz é uma grande aventura, falo pela minha experiência ao desenvolver o CajuScript.

Você pode é fazer um conversor para adaptar para correr com outra linguagem, no caso CajuScript, ou outra qualquer.

Mas boa sorte… não sei qual é o retorno desta empreitada, mas acredito q deve valer o esforço :wink:

Bem interessante,
Já tinha ouvido falar do cajuscript e achei muito interessante a iniciativa, vou até baixar pra ver como ele funciona…
Realmente preciso de algo mais simples, não tão encorpado como uma linguagem de mercado, pois o objetivo é atender ao específico e não ir à este ponto de se tornar uma linguagem comercial…

Uma outra alternativa é ao invés de fazer todos os passos de um compilador, eu criar uma camada que verifica os ítens definidos em um xml e assim converte para php, o que vc acha amigo eduveks? será que é viável? Ou é melhor criar mesmo uma mini-linguagem, ou uma meta-linguagem?

aqui, aproveitando, como faço pra me integrar no desenvolvimento do projeto do cajuscript?

http://groovy.codehaus.org

Seria interessante ao invés de criar uma nova linguagem, somente fazer uma camada que transcreve o código em outro para este caso?

Seria, ao invés de usar uma nova linguagem, que tal usar uma linguagem já pronta?

O caso é::

Aqui na empresa, sou desenvolvedor PHP, onde trabalho no setor de desenvolvimento de framework, e estamos criando um application builder de alta performance em php, para criar sistemas de grande porte e complexos, e para isso, a gente precisa de uma ferramenta de geração de relatórios e apoio a BI, eu fiquei incubido de pesquisar a ferramenta e implementar, mas em php não existe nenhuma que presta, aí decidi escolher uma em java, as duas que mais agradei foram o BIRT que não o escolhi somente porque seus pdfs não são fiéis ao html gerado por ele e o Jasper que é bem forte no mercado.

Para disponibilizarmos precisamos de integrar essa ferramenta ao application builder, mas para isso, se usassemos em java, as grandes empresas que são nossas clientes deveriam ter dois servidores de aplicação instalados no caso o apache e outro como o jeronimo ou classfish entre outros, para não ter esse problema, me incubiram de fazer a engenharia reversa somente através dos aspectos do xml gerado pelo ireports, e características de implementação da api do jsaper e depois vou fazer um ireports em php, já fiz uma versão da ferramenta, mas sem grandes recursos, agora estou fazendo ela com a maioria dos recursos disponíveis implementando a maioria de design patterns necessários…

Por isso não posso usar outra linguagem, e sim criar ou fazer uma camada para que as expressões inseridas no gerador sejam interpretadas e façam a interação necessária com o relatório.

Entendeu o pq amigo…, puxado mesmo, mas o bom é que haverá uma alternativa para o povo PHP, embora creio que não será open-source…

O Groovy é muito mais robusto que o CajuScript.

Mas o CajuScript consome muito menos memória e tem um startup muito mais rápido do que o Groovy. E há vários casos em que a performance do script com Groovy era muito pesada e demorada, e com o CajuScript se tornou muito mais rápido.

Depende do cenário os pontos positivos de um pode valer mais a pena do que outro. E também claro… o “gosto” sempre conta. :stuck_out_tongue:

E a curva de aprendizagem do CajuScript penso que é muito curta também, por ser simples.

Só queria frizar também que os objetivos do CajuScript não são os mesmo do Groovy. Enquanto que o Groovy aposta em ser uma linguagem completa e robusta, o CajuScript foca em ser simples e leve, para pequenas implementações de script.

Caso for fazer uma solução inteira em linguagem de script o CajuScript certamente não será a melhor escolha, mas se for ter apenas pequenas parte do programa em script, ai sim o CajuScript pode ser a melhor opção.

Vini, nada contra o Groovy, muito pelo contrário, apenas para ficar claro que o ramo de um não é o ramo do outro :stuck_out_tongue:

Há e também outro ponto, é que o Groovy é muito mais popular e assim muito mais ativo, já o CajuScript não.

Não entendi por que você precisa de um application server para rodar o Jasper Reports. Só a JRE instalada + as libs não ficaria bom?

Bom mano, ce num entendeu, eu preciso desta solução em PHP, e não existe ainda, só a que eu fiz primeiro, agora estou criando um “JasperReports” em PHP, uma api de geração de relatório, que satisfaça o que o outro faz, e este já está em fase avançada de desenvolvimento, sendo que faz grande parte do que se necessita, mas preciso avançar com a ferramenta, por isso preciso de uma “Linguagem que traduza o Java para PHP”, entendeu?
flw brother…

[quote=xjunior]O caso é::

Aqui na empresa, sou desenvolvedor PHP, onde trabalho no setor de desenvolvimento de framework, e estamos criando um application builder de alta performance em php, para criar sistemas de grande porte e complexos, e para isso, a gente precisa de uma ferramenta de geração de relatórios e apoio a BI, eu fiquei incubido de pesquisar a ferramenta e implementar, mas em php não existe nenhuma que presta, aí decidi escolher uma em java, as duas que mais agradei foram o BIRT que não o escolhi somente porque seus pdfs não são fiéis ao html gerado por ele e o Jasper que é bem forte no mercado.

Para disponibilizarmos precisamos de integrar essa ferramenta ao application builder, mas para isso, se usassemos em java, as grandes empresas que são nossas clientes deveriam ter dois servidores de aplicação instalados no caso o apache e outro como o jeronimo ou classfish entre outros, para não ter esse problema, me incubiram de fazer a engenharia reversa somente através dos aspectos do xml gerado pelo ireports, e características de implementação da api do jsaper e depois vou fazer um ireports em php, já fiz uma versão da ferramenta, mas sem grandes recursos, agora estou fazendo ela com a maioria dos recursos disponíveis implementando a maioria de design patterns necessários…

Por isso não posso usar outra linguagem, e sim criar ou fazer uma camada para que as expressões inseridas no gerador sejam interpretadas e façam a interação necessária com o relatório.

Entendeu o pq amigo…, puxado mesmo, mas o bom é que haverá uma alternativa para o povo PHP, embora creio que não será open-source…

[/quote]

Opa,

Bom, sinceramente? Se você diz que só não escolheu o BIRT pois achou o PDF gerado nada fiel, eu acho que compensa muito mais você baixar ele e mudar o que não te agrada. Isso pode virar até um patch depois para o BIRT, você pode fazer uso disso como curriculum, tb.

Eu estou passando por uma experiência dessas de integração/modificação. Estou integrando o jBPM à nossa engine. Te garanto: MUITO melhor pegar algo assim do que fazer do zero. O jBPM4 que estou usando por ex. contém certas coisas que demorariam no mínimo um ano pro time desenvolver. Não gaste tempo à toa.

[]'s

Bom mano, ce num entendeu, eu preciso desta solução em PHP, e não existe ainda, só a que eu fiz primeiro, agora estou criando um “JasperReports” em PHP, uma api de geração de relatório, que satisfaça o que o outro faz, e este já está em fase avançada de desenvolvimento, sendo que faz grande parte do que se necessita, mas preciso avançar com a ferramenta, por isso preciso de uma “Linguagem que traduza o Java para PHP”, entendeu?
flw brother…[/quote]

Dê uma procurada em JSON. Vê se te ajuda se for esse o caso.

:arrow: Mas vc quer traduzir o JasperReports para PHP!? Ou seja, traduzir código Java em PHP…

:arrow: Ou quer chamar o JasperReports a partir do PHP? Ou seja, executar Java a partir do PHP…

Qual das duas??? A primeira hipótese penso que é doidera :twisted:

[quote=AUser][quote=xjunior]O caso é::

Aqui na empresa, sou desenvolvedor PHP, onde trabalho no setor de desenvolvimento de framework, e estamos criando um application builder de alta performance em php, para criar sistemas de grande porte e complexos, e para isso, a gente precisa de uma ferramenta de geração de relatórios e apoio a BI, eu fiquei incubido de pesquisar a ferramenta e implementar, mas em php não existe nenhuma que presta, aí decidi escolher uma em java, as duas que mais agradei foram o BIRT que não o escolhi somente porque seus pdfs não são fiéis ao html gerado por ele e o Jasper que é bem forte no mercado.

Para disponibilizarmos precisamos de integrar essa ferramenta ao application builder, mas para isso, se usassemos em java, as grandes empresas que são nossas clientes deveriam ter dois servidores de aplicação instalados no caso o apache e outro como o jeronimo ou classfish entre outros, para não ter esse problema, me incubiram de fazer a engenharia reversa somente através dos aspectos do xml gerado pelo ireports, e características de implementação da api do jsaper e depois vou fazer um ireports em php, já fiz uma versão da ferramenta, mas sem grandes recursos, agora estou fazendo ela com a maioria dos recursos disponíveis implementando a maioria de design patterns necessários…

Por isso não posso usar outra linguagem, e sim criar ou fazer uma camada para que as expressões inseridas no gerador sejam interpretadas e façam a interação necessária com o relatório.

Entendeu o pq amigo…, puxado mesmo, mas o bom é que haverá uma alternativa para o povo PHP, embora creio que não será open-source…

[/quote]

Opa,

Bom, sinceramente? Se você diz que só não escolheu o BIRT pois achou o PDF gerado nada fiel, eu acho que compensa muito mais você baixar ele e mudar o que não te agrada. Isso pode virar até um patch depois para o BIRT, você pode fazer uso disso como curriculum, tb.

Eu estou passando por uma experiência dessas de integração/modificação. Estou integrando o jBPM à nossa engine. Te garanto: MUITO melhor pegar algo assim do que fazer do zero. O jBPM4 que estou usando por ex. contém certas coisas que demorariam no mínimo um ano pro time desenvolver. Não gaste tempo à toa.

[]'s[/quote]

Bom amigo, se eu escolhece o BIRT, seria a mesma coisa, mas ele é um pouco menos complicado, agora, realmente desenvolver uma ferramenta destas do zero é complicado, mas a empresa quis assim e eu tinha falado antes que tinha como desenvolver a partir dela, então a responsabilidade foi pra minha mão.

Nesta ferramenta que estou desenvolvendo em PHP, eu estou desenvolvendo ela sozinho, e por causa da performance tenho q gastar muito neurônio pensando em solução pra fazer o produto acontecer, graças à Deus já tá em um ponto muito bom, que pra ficar mais completo falta fazer este módulo, a única coisa que ainda não implementei e nem sei se vou fazer assim é o hashmap, pois no nosso caso não é necessário fazer isso.
Vi uma que uns malaios tão tentando fazer, um tal de PHPJasper XML, muito ruim a ferramenta, era feita em PHP4 (terrível, quase num tinha orientação à objetos), eles estão a 1 ano e meio tentando fazer a ferramenta e eu em menos de 1 mês e meio criei uma que fazia quase tudo, enquanto a deles nem renderizava direito, mas agora esta que estou desenvolvendo agora, que já tem 2 meses, está em um ponto muito bakana.

Não sei se a solução que você está imaginando é a melhor alternativa para resolver o problema… mas a melhor alternativa para sua solução é o javaCC. https://javacc.dev.java.net/.
Inclusive nos exemplos já possui um parser para instruções java, é o que você precisa…
O seu trabalho seria apenas de implementar as ações semânticas nos pontos certos para gerar as instruções php.

[quote=eduveks] :arrow: Mas vc quer traduzir o JasperReports para PHP!? Ou seja, traduzir código Java em PHP…

:arrow: Ou quer chamar o JasperReports a partir do PHP? Ou seja, executar Java a partir do PHP…

Qual das duas??? A primeira hipótese penso que é doidera :twisted:

[/quote]
Meu amigo, é totalmente inviável ler o código java e transferir em php, estou criando uma aplicação nova com os aspectos do jasper e baseado no seu xml, não é o jasper e nem tem código fonte do jasper, é algo novo, inexistente no mundo PHP, e não quero fazer JAVA Bridge, e já estou em fase avançada de desenvolvimento desta ferramenta, já não é que quero fazer e sim acabá-la e partir pro próximo produto…
entende?

Nem tentei ler o código fonte do jasperreports, fiz tudo novo, baseado em minha lógica…

[quote=xjunior][quote=eduveks] :arrow: Mas vc quer traduzir o JasperReports para PHP!? Ou seja, traduzir código Java em PHP…

:arrow: Ou quer chamar o JasperReports a partir do PHP? Ou seja, executar Java a partir do PHP…

Qual das duas??? A primeira hipótese penso que é doidera :twisted:

[/quote]
Meu amigo, é totalmente inviável ler o código java e transferir em php, estou criando uma aplicação nova com os aspectos do jasper e baseado no seu xml, não é o jasper e nem tem código fonte do jasper, é algo novo, inexistente no mundo PHP, e não quero fazer JAVA Bridge, e já estou em fase avançada de desenvolvimento desta ferramenta, já não é que quero fazer e sim acabá-la e partir pro próximo produto…
entende?

Nem tentei ler o código fonte do jasperreports, fiz tudo novo, baseado em minha lógica…[/quote]

Ok, certo… então para que a tal linguagem nova?! E o Java na conversa?

Só para executar as expressões Java do Jasper? Hummm para isto mais vale criar um interpretador na pata e nas marteladas para isto…

Pois o mundo que vc montou no PHP é incompatível e não é linear ao mundo do Jasper/Java. Portanto nenhum meio automático deve servir.

Vc tem que interpretar as expressões do Jasper da maneira que se enquadra com o teu cenário no PHP.

E quem sabe criar as tuas próprias expressões… pois podes ter coisas que o Jasper não tem, e o Jasper pode ter coisas que o teu não tem…

[quote=ctdaa]Não sei se a solução que você está imaginando é a melhor alternativa para resolver o problema… mas a melhor alternativa para sua solução é o javaCC. https://javacc.dev.java.net/.
Inclusive nos exemplos já possui um parser para instruções java, é o que você precisa…
O seu trabalho seria apenas de implementar as ações semânticas nos pontos certos para gerar as instruções php.
[/quote]
OK. javaCC serve também para criar uma linguagem totalmente nova… ou interpretar algo já existente.

[quote=xjunior]Olá galera do guj,

Estou desenvolvendo um JasperReports em PHP, e preciso criar uma mini-linguagem de programação para executar as expressões feitas em java, como não fiz a matéria de Compiladores e na grade do meu curso da facul não tem mais, gostaria de algumas dicas de vcs…
Se alguém já tiver feito qualquer tipo de linguagem de programação idependente da linguagem, até o meu xodó C++, pode postar, fico muito grato.
Aqui no trampo falaram pra mim usar o design pattern interpreter, mas acho que num vai atender muito.

Se tiverem tutoriais ou apostilas, favor me enviar, não vou ter que fazer a linguagem completa, só o que é mais usado para gerar relatórios ou gráficos, subrelatórios, cubo e etc., entende?

Valeu galera…[/quote]

Não sei entendi a duvida corretamente, mas se é uma linguagem para gerar relatórios, porque não se baseia no Smarty(http://www.smarty.net/) para criar? Ele tem uma linguagem própria bem simples, e é bem extensível. No padrão a linguagem dele serve para gerar HTML(para templates, você deve conhecer). E você pode usar o HTML para gerar PDF se necessitar. Buscando no Google achei esse artigo que pode te ajudar: http://www.adrianoweb.com.br/prospero/modules/wordpress/2008/06/21/modelando-relatrios-pdf-com-smarty/

Espero ter ajudado.