sexta-feira, 15 de junho de 2012

C# - Algumas notícias sobre o interpretador!

Bem...Eu tinha dito que queria fazer o interpretador em linguagem C . Pronto, eu fiz todas as funções que acabei desenvolvendo em C# ,  porém é muito melhor tratar strings com C# , então como se trata de um protótipo eu vou continuar a desenvolver nesta linguagem!

Até agora o interpretador distingue  e interpreta :

'comentários (É claro! Que não é interpretador e nem compilado  , simplesmente ignorado!!)
PRINT  , A função print , imprimi  somente textos por enquanto sem precisar especifica-los através de aspas(estou tentado corrigir).
Ele também distingue os tipos de dados do BASIC  puro, Int e String;

'Test
PRINT TESTANDO
$String = " "
%Integer = 0 

 Podemos fazer isso ai em cima somente ou coisas parecidas hahaha....Bem consegui fazer isso com apenas 134 linhas!Se fosse com C eu estaria na faixa de umas 300 ou mais , porém muito mais rápido!
 Vejam o print da tela abaixo!

(Clique na imagem para ampliar)

Quando eu terminar(Se terminar hhahaha!!!) eu posto o código completo , com os arquivos do projeto e com tudo que vocês tem direito para brincar assim como eu de criar interpretadores!Mas por enquanto apenas um "brinde" : A função PRINT (Do jeito que ela está no projeto) em C e C#.

C :

char funcao[]="";
//func palavra resevada
char msg[1500];
//msg
// FUNCAO PRINT
if(code == 2);
{
printf(" \n");
scanf("%s",msg,"\n");
if(msg==" ")
{
printf (" Erro ao executa a função print(msg em branco!)\n");
}
printf("%s",msg,"\n");
}
C#
                string msgOut = string.Empty;
                string funcao = string.Empty;
                string i      = string.Empty;

                    //Exibir o prompt
    System.Console.ForegroundColor = ConsoleColor.Green;
                    System.Console.Write(prompt);
                    System.Console.ResetColor();
                    //Receber entrada da funcao
                    funcao = System.Console.ReadLine();
         #region  Função PRINT
                    try
                    {
                        i = funcao.Substring(0, 5);
                        //Funcao IMPRIMIR (Print)
             if (i == "print" || i == "Print" || i == "PRINT")
                        {
                            //     msgOut = System.Console.ReadLine();
                            System.Console.Write("");
                            //Exibir saída
               msgOut = funcao.Substring(5, funcao.Length - 5);
      System.Console.ForegroundColor = ConsoleColor.DarkCyan;
                            System.Console.WriteLine(msgOut);
                            System.Console.ResetColor();
                        }
                    }
                    catch
                    { //Passar o char
                        Funcoes.nxtChar();
                    }
              #endregion




Bem...Em C# o código nessa parte ficou muito maior porque coloquei estrutura de tratamento de erros,cor da fonte e outras coisas ...Opa! Quase faltou , a função no C# nxtChar();, basta criar uma classe Funcoes e um metodo public nxtChar e colocar nele : System.Console.Write(string.Empty);

Então é isso , até o próximo post!


quarta-feira, 13 de junho de 2012

Micro OS - Para processadores 86x

Ano passado eu estudei cerca de  4 à  5 meses a respeito de sistemas operacionais , muita documentação , projetos open source e tudo mais , compilei alguns exemplos  e brinquei de programar SO (Como faço até hoje HAHAHAAHA....) . O meu primeiro SO , foi com base em um exemplo na internet e com a documentação de um emulador de processador 86x (Arquitetura IA-32) , 16 bits também .Ele somente escrevia "Meu primeiro SO"! Pronto , não precisava mais nada , eu era o cara mais feliz do mundo , então pesquisando na internet eu achei uma página muito bacana (http://www.htlsteyr.ac.at/~morg/pcinfo/hardware/interrupts/inte1at0.htm)
de um professor de computação , Roger Morgan , acho que ele é americano . Ok , ta bom , eu não sei!
Nesta página esta listada as Interrupções para processadores 86x , vale a pena conferir . Então baixei um emulador e assembler para 86x o emu86 , comecei a estudar aos poucos , pegava um pouquinho todo dia , de vez em quando largava de mão , mas nunca parava , rodei alguns exemplos , escrevi os meus próprios e alguns pequenos programas. Então no EMU8086 , tem uma ótima documentação , e vários exemplos e tutoriais , então achei um micro-kernel e um micro-loader  , Então comecei a estudar ambos , com mais atenção ao kernel , e então criei um projeto baseado nele , que tinha apenas 3 comandos , reiniciar , deligar e exibir ajuda . Até então foi o máximo que tinha conseguido , pois bem , continuei meus estudos sobre OS e resolvi trabalhar com o exemplo do kernel , estudei todas seu código fonte , lógica.E então resolvi traduzir toda sua documentação os comentário e quero traduzir o código funcional também para português , além de modificar várias coisas , como : Interrupções ,criar mais opções para o shell, modificar sistema e vídeo e etc.Eu pretendo fazer um interpretador de linguagem BASIC, mas porém tenho que antes criar um sistema de arquivos , e está complicado :) . Ta bom , eu admito , fico brincando com Borland C++ Builder,VBA e Fortran  ao invés de estuda isso! Mas eu quero fazer !
 Enfim , foi um trabalho que durou no máximo uma semana , somando os dias que eu enrolei ! Eu criei meu projeto com a base nesse exemplo , tem aproximadamente 800 linhas ou mais (O kernel) , o loader 300 (OBS : O exemplo está com loader para disquete) e mais algumas 200 à 300 de macros e procedimentos que criei , tudo tem cerca de 1250 + Linhas, não é um sistema funcional , pois ainda não tem utilidade alguma a não ser acadêmica e de estudo!
Veja uma print abaixo:

Rodando no emulador 86x do EMU8086

Bem...Ontem eu enrolei , hoje pretendo começar a escrever um protótipo de interpretador de BASIC em C para pegar a lógica e fazer o disassembly e implementar em assembly no OS , está complicado...

Chegamos ao fim dessa postagem... Assim que tiver novidades com o projeto eu divulgo aqui!
Aos interessados tem alguns links abaixo que podem ser úteis.

OS Dev - http://wiki.osdev.org/Expanded_Main_Page
OS Dev Brasil - http://www.osdevbrasil.net/
Assembly86x - http://www.cs.virginia.edu/~evans/cs216/guides/x86.html
Boot  - http://pt.wikipedia.org/wiki/Boot
Kernel - http://en.wikipedia.org/wiki/Kernel_(computing)
EMU8086  : http://www.baixaki.com.br/download/emu8086-microprocessor-emulator-and-8086-assembler.htm

AVISO : O projeto do BOT em C++ foi descontinuado

DO projeto do BOT em C++ foi descontinuado devido a minha pausa nas atividades do blog!

Livros de computação grátis

Navegando pela internet acabei encontrado alguns sites que tinham livros de diversos assuntos relacionados a computação para download , e o melhor de graça (OBS : All in english,LOL....).

http://freecomputerbooks.com/  : É o melhor na minha opinião ;) , pois reúne um acervo enorme de livros de matemática,IA,Engenharia de Software , C , C++ , Java, Delphi , Android ,Windows , Linux ...Tudo! Vale a pena conferir

http://www.computer-books.us/ : Esse outro reúne conteúdos de  :

ADA 95

AppleScript
Assembly Language
Awk
BASIC
C
C++
COBOL
C#
Delphi
Forth
Fortran
Java
Linux
Lisp
Perl
PHP
PostScript
Python
SQL
Visual Basic

E também temos o http://www.programmingbooks.org/ , e o http://bookboon.com/ que é ótimo também , com ebooks até de outras áreas e engenharias!

AVISO : RETORNO

Passei um bom tempo sem escrever , pois tinha desistido de continuar com o projeto. Porém ,eu resolvi voltar a escrever no blog .

domingo, 25 de março de 2012

C++ - Inteligência Artificial - Criando um Bot. (parte 1)

 Olá caro leitor , este post é o primeiro de um série que pretendo realizar enquanto desenvolvo um protótipo de um boot para chats ou até mesmo jogos utilizando linguagem C++,tomei como base teórica uns exemplos no site http://ai-programming.com (Inglês).Neste exemplo utilizarei o Visual C++ Express para compilar e gerenciar meu código.Como essa e a primeira postagens de inteligência artificial , eu vou indicar alguns links para que você fique por dentro.

http://www.cplusplus.com/reference/   - C e C++ , algorítimos em geral (Em Inglês).
http://pt.wikipedia.org/wiki/Bot           - Bots
http://ai-programming.com                  -  Inteligência Artificial e C++ (Em Inglês).
http://pt.wikipedia.org/wiki/Intelig%C3%AAncia_artificial -  Inteligência Artificial uma visão geral (Em português)


(Clique para ampliar)

Neste post vamos apresentar somente a função de cumprimentar somete (" exemplo : oi,olá,eai").Vou apresentar nesta primeira parte somente o "system programming", que é configurar o console.

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string>

#pragma warning(disable: 4786)

#define ai001
#define functions

#ifdef ai001
#ifdef functions

   using namespace std;

class controler
{
  public:

 int contador_INPTS;
};

 void pause(){system("pause");}
 void cls(){system("cls");}
 void fim(){system("exit");}
 void jmpln(){cout<<" "<<endl;}

int main()
{
cls();

/*
controler ctrl;
ctrl.contador_INPTS;
*/
int cont = 0;

system("title IA-001");
system("color 1f");

cout<<"IA-001 Application"<<endl;
pause();

return 0;

}


#endif
      #endif

 void pause(); equivalente à pause do Batch.
 void cls(); equivalente à cls do Batch.
 void fim(); equivalente à exit do Batch.



Até a próxima postagem sobre Bots

quinta-feira, 22 de março de 2012

Tipo da navegação - Esclarecendo o método de conversão (com python)

Olá caro leitor,neste post irei mostrar mais detalhadamente o método de conversão utilizado no desenvolvimento daquele nosso primeiro programinha em Fortran , porém,desta vez utilizaremos a flexibilidade do Python para que seja melhor explicado e compreensível para todos.Lembra-se daquela sequência lógica que por mim foi elaborada para "ilustrar" o funcionamento do programa na parte de conversão de valores?Então,nessa postagem você irá ver como fazer esta conversão de uma maneira mais "dinâmica",ao menos na minha opinião.Bem para quem não viu a postagem da qual eu citei algumas informações acima clique aqui e leita a mesma.
Primeiramente , desta forma que eu irei apresentar , tem o propósito de deixar muito mais fácil a conversão de unidades de valores , trocando apenas algumas variáveis ou constantes,neste caso a implementação foi em Python.porém você também pode usar outras linguagens.Muito bem, vamos por a mão na massa!
   Imagine que você tem uma variável D (distância), em que seu valor é igual a V (valor variável) e mn (constante) e queira transformar o valor de D em uma outra unidade.Você pode pensar ,muito fácil,preciso somente usar uma outra constante em cada caso,bem , pode até ser , mas você irá ganhar uns Kilobytes a mais de consumo de memória com seu programa em execução, ao clicar na imagem acima, no meu exemplo você pode notar que utilizei uma mesma constante e operações , modificando somente os valores finais, fazendo com que economizemos espaços na  memória com outras variáveis e possamos fazer tudo isso de uma forma mais simples.Claro isso tem de ser tratado na sua aplicação , mas não vem ao caso comentar isso neste postagem,deixarei este assunto para talvez uma outra postagem.

  A formula é a seguinte.

Y = v (operador) constante (operador)  1
(Y pode ser alterado por qualquer letra.)

 Esse valor "1" deve ser alterado para que possa ocorrer a mudança da unidade.Então você pode alterar a unidade com apenas 3 variáveis em diversas situações.

  Por exemplo

 Vamos imaginar que temos 3 variáveis de tipo inteiro de 4 bytes. (4b*3var=12bytes).

EX1: Kilometros

 valor = 1;
 constante = 1;
 r = valor * constante  * 1000

 r = 1000 m.

EX2: Metros





 valor = 1;
 constante = 1;
 r = valor * constante  * 1


r = 1 m.



Então ,com estes poucos exemplo é possível transformar unidades com facilidade em sem "estourar sua memória".

Link da outra postagem aqui.