(Prova de Conceito) Compilador Dinвmico - C# -
ipsBruno - 17.08.2012
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
Re: (Prova de Conceito) Compilador Dinвmico - C# -
FeelLikeASir_ - 17.08.2012
Bom.
Re: (Prova de Conceito) Compilador Dinвmico - C# -
ipsBruno - 17.08.2012
___
Obrigado FeelLikeASir_
______
Pessoal, se fizerem
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
й 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(played, 100.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
Re: (Prova de Conceito) Compilador Dinвmico - C# -
Abravanel - 17.08.2012
Interessante, parabйns
.
Respuesta: (Prova de Conceito) Compilador Dinвmico - C# -
Truck - 18.08.2012
Very Very Cool, bem dinвmico, Parabйns. Amanhг testo ele.
Re: (Prova de Conceito) Compilador Dinвmico - C# -
Mr.Hardy - 18.08.2012
У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)
Re: (Prova de Conceito) Compilador Dinвmico - C# -
Kuddy - 18.08.2012
Quote:
Originally Posted by ipsBruno
Fiz em 30 minutos
|
Nassa, tu й foda mesmo hein ^^
__
Уtimo para estudos =D
Re: (Prova de Conceito) Compilador Dinвmico - C# -
paulor - 18.08.2012
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.
Re: (Prova de Conceito) Compilador Dinвmico - C# -
ipsBruno - 18.08.2012
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
Re: (Prova de Conceito) Compilador Dinвmico - C# -
Math3us - 18.08.2012
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