[Tool/Web/Other] (Prova de Conceito) Compilador Dinвmico - C#
#1

Compilador Run Time


Vн a dъvida de um carinha aн no fуrum sobre como compilar um cуdigo em tempo real. Pensando nisto fiz um cуdigo em C# que faz isto facilmente - estou aprendendo C#

Ideia
http://forum.sa-mp.com/showpost.php?...71&postcount=8

Cуdigo Fonte:

- Todo explicado para quem quer desenvolver um editor.

pawn Код:
using System;
using System.IO;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.ComponentModel;




namespace WindowsFormsApplication5 {
    public partial class Form1 : Form {

        public Form1() {
            InitializeComponent();

        }

        private void textBox1_Click(object sender, EventArgs e) {

            // caminho do arquivo temporario para compilar
            string arquivoTemporario = "c:/arquivoCompilado.txt";

            // escrever a edicao no arquivo
            File.WriteAllText(arquivoTemporario, textBox1.Text);

            Process p = new System.Diagnostics.Process();

            // diretorio atual
            p.StartInfo.WorkingDirectory =  Directory.GetCurrentDirectory();

            // iniciar minimizado
            //p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

            // aplicativo a abrir
            p.StartInfo.FileName = "pawncc.exe";

            // comando abrir
            p.StartInfo.Verb = "open";

            // colocar argumentos -c
            p.StartInfo.Arguments = arquivoTemporario;

            // redirecionar a saida do aplicativo
            p.StartInfo.RedirectStandardOutput = true;
           
            p.StartInfo.UseShellExecute = false;
           
            // iniciar
            p.Start();

            // esperar ele finalizar
            p.WaitForExit();

            // pegar o retorno dado por pawncc
            StreamReader bufferOut = p.StandardOutput;

            // verificar se encontrou erro  
            textBox2.Text = bufferOut.ReadToEnd();

            if (textBox2.Text.IndexOf("Error") != -1 || textBox2.Text.IndexOf("rrror") != -1)
            {
                textBox2.Text = "Foi encontrado um erro na ъltima linha editada";
            }
            else
            {
                textBox2.Text = "Foi compilado com sucesso";
            }

        }

        private void teclaPressionada(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar ==  (Char)Keys.Return )
            {
                string arquivoTemporario = "c:/arquivoCompilado.txt";

                // escrever a edicao no arquivo
                File.WriteAllText(arquivoTemporario, textBox1.Text);

                Process p = new System.Diagnostics.Process();

                // diretorio atual
                p.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory();

                // iniciar minimizado
                //p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                // aplicativo a abrir
                p.StartInfo.FileName = "pawncc.exe";

                // comando abrir
                p.StartInfo.Verb = "open";

                // colocar argumentos -c
                p.StartInfo.Arguments = arquivoTemporario;

                // redirecionar a saida do aplicativo
                p.StartInfo.RedirectStandardOutput = true;

                p.StartInfo.UseShellExecute = false;

                // iniciar
                p.Start();

                // esperar ele finalizar
                p.WaitForExit();

                // pegar o retorno dado por pawncc
                StreamReader bufferOut = p.StandardOutput;

                // verificar se encontrou erro  
                textBox2.Text = bufferOut.ReadToEnd();

                if (textBox2.Text.IndexOf("Error") != -1 || textBox2.Text.IndexOf("rrror") != -1)
                {
                    textBox2.Text = "Foi encontrado um erro na ъltima linha editada";
                }
                else
                {
                    textBox2.Text = "Foi compilado com sucesso";
                }
            }
        }
    }
}
Demonstraзгo:
http://www.solidfiles.com/d/23e140b3ea/

_________

Lуgica usada:

A cada ENTER ou CLIQUE no texto ele compila com aplicativo e mostra se deu erro na ъltima linha editada. Lб vocк tem a opзгo de compilar em modo oculto ou nгo. Deixei bem bбsico, fiz em poucos minutos. Й a segunda vez que mexo com C#, entгo se tiver alguma coisa falhada com relaзгo ao cуdigo basta me avisar

- Agora quero ver o pessoal fazer um IDE com isto, hein
Reply
#2

Bom.
Reply
#3

___

Obrigado FeelLikeASir_

______

Pessoal, se fizerem

PHP код:
if(bla == 1) { 
Em um cуdigo, vai dar errado mesmo, coloque sу isto no pawno e verбs - qualquer novato em pawn sabe que isto darб vбrios erros

Alйm do mais, quando vocк programa no VB vocк vai programando e eventualmente ele acusa erros em linhas inacabadas - sim. Este sistema faz quase o mesmo, sу que sempre apуs o enter, logo se acusou errou em

PHP код:
if(blla == 1
й porque falta cуdigo embaixo e o sistema nгo pode "prever o futuro sabendo qual cуdigo vocк vai colocar". O que fazer nestes casos? Ignorar, apenas termine o escopo atual e aн sim veja se ocorreu algum erro.


FUNCIONALIDADE

O objetivo deste sistema й para quando vocк tem falhas do tipo

PHP код:
SetPlayerHealth(played100.0); 
e no final das contas tu da compilar no pawno e dб erro para colocar "playerid" - nгo й ъtil, nestes casos ? ? ?

* Para quem quer insistir e usar como um editor, eu deixo bem claro:
Que o tуpico diz bem grande " PROVA DE CONCEITO", alйm do mais isto й simples, nгo irei montar um algorнtimo para embedar cada escopo ъnico para fazer a compilaзгo, se alguйm aqui quer melhor se vire, isto nгo й um editor dedicado. Fiz em 30 minutos, o Vitor Iron me deu uma dica sobre Shell Execute

[*] Baixem NET Framework 4.0


--------

Lembrando que isto provavelmente trava se um gamemode tiver muitas linhas, MAS ISTO NГO Й UM EDITOR, Й APENAS UM MЙTODO PARA COMPROVAR X CONCEITO. Alias, para nгo travar basta colocar em uma thread e estб tudo tranquilo
Reply
#4

Interessante, parabйns .
Reply
#5

Very Very Cool, bem dinвmico, Parabйns. Amanhг testo ele.
Reply
#6

Уtimo. Mais o proximo passo й adquerir a funзгo "hide". Esconder o compilador, pois ele mostrando a cada ENTER й meio enjoante. Mais em relaзгo б tudo isso, achei uma уtima ideia. Parabйns, vocк й meu Einster Brasileiro. (Bora pesquisar sobre Бtomos =D)
Reply
#7

Quote:
Originally Posted by ipsBruno
Fiz em 30 minutos
Nassa, tu й foda mesmo hein ^^

__

Уtimo para estudos =D
Reply
#8

Bruno, pra GM's pesados creio que nгo daria muito certo nгo... Vou testar jб dou Edit!

@Edit, Vai bem atй, Imaginei errado, Mais ae fica meio estranho nгo aparecendo os erros neh.
Reply
#9

Valeu Pessoal.


Pois й Paulo, eu nгo fiz isto com intenзгo de fazer um editor, atй porque agora estou com alguns projetos em aberto
Reply
#10

eae bruno malz fala de um assunto que nao tem nada aver com isso aqui mais eu fui ver seu servidor legalzinho. quando peguei um pickup de pirula tomei crash mais oque eu quero ti mostar й isso nem tem como ler direito tem que dar mais linhas ^^

se bugo a foto й essa:/imageshack/img705/2088/semttuloqjo.png

@edit muito bom gostei ^^ nunca joguei em um server zumbi achei muito interresante
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)