Linguagem de programação do Fabio!

Sub-fórum especial para usuários que querem discutir/aprender programação, como as linguagens C/C++/C#, Java, HTML, e por aí vai...
xducke
Mensagens: 87
Registrado em: Sex Jan 15, 2010 4:29 am
Answers: 0
14

Re: Linguagem de programação do Fabio!

Mensagem por xducke »

Hahaha... eu tambem volto as aulas dia 22 de fev.
Estou acelerando todos os meus projetos aqui :lol:
Desk:
Intel Core i7 980X @ 4.25GHz
EVGA X58 SLi Classified
12 GB OCZ 1800 MHz
2x XFX HD 5870 @ 1000/1300
Dell 24WFP 24"

Note:
Alienware M15X // Core i7 740 QM 2.93 GHz // 4 GB DDR3 // 500 GB // GTX 460M // 15.6"
Avatar do usuário
Fabio914
Mensagens: 1757
Registrado em: Dom Mai 21, 2006 4:38 pm
Answers: 0
17
Localização: Sampa/Sanca
Contato:

Re: Linguagem de programação do Fabio!

Mensagem por Fabio914 »

xducke escreveu:Hahaha... eu tambem volto as aulas dia 22 de fev.
Estou acelerando todos os meus projetos aqui :lol:
Hehe, eh o jeito neh... Porque depois, durante o semestre, fica foda fazer algum projeto próprio...

@DU0:
Cara, qual teu sistema operacional? Eu testei no Windows 7 (32-bits) e obtive o mesmo resultado satisfatório...
(obs.: o programa foi compilado no Windows XP x64)

Mais uma pergunta, você tinha bastante memória disponível durante a execução do programa? Pode parecer meio idiota mas o programa carrega um buffer de um pouco menos de 1MB para armazenamento do texto do programa, então se ele não alocou todo esse espaço pode dar erro (embora fosse para dar mensagem de erro própria da alocação de memória)...

EDIT:

@DU0: Testa esse programa (bobo) aqui:

Código: Selecionar todos

Declara {
   Var string nome;
   Var int idade;
   return;
}

RecebeDados {
   Messageln("Qual seu nome?");
   Get(nome);
   Messageln("Qual sua idade?");
   Get(idade);
   return;
}

ImprimeResultado {
   Message("Voce se chama "); Print(nome); Message(" e tem "); Print(idade); Messageln(" anos.");
   return;
}

Pausa {
   System("pause");
   return;
}

Rodar {
   Declara;
   RecebeDados;
   ImprimeResultado;
   return;
}

main() {
   Messageln("Programa da idade!");
   Rodar;
   Pausa;
}
EDIT 2:

Não se pode colocar ifs dentro de funcoes, apenas na main... Isso é um problema que daqui a pouco eu vou corrigir!
Projetos em andamento
the Core
Eclipse

Projetos parados
Doom 3 on GZDoom
FSD Project

PC
AMD Athlon 64 X2 5200+ (2x 2.6Ghz)
2GB RAM (2x 1GB DDR2)
240GB (160GB SATA + 80GB SATA)
XFX nVidia GeForce 8600 GT (600mhz 256mb)
Placa Mãe ASUS M2N4 SLI (2x PCI-E 16x SLI, 4x DDR2 800, nForce 4)
Fonte 500W reais (esqueci o nome da marca)
Monitor LG Flatron 19'' LCD
Rico
Mensagens: 2354
Registrado em: Dom Set 10, 2006 11:49 am
Answers: 0
17
Localização: Atrás do DU0
Contato:

Re: Linguagem de programação do Fabio!

Mensagem por Rico »

Bom, o que temos aqui é um interpretador Just in Time.
Tempo real.
Por enquanto binários fora de questão :P
[xfire]p0br3[/xfire]
Futuro PC:

CPU: AMD Athlon x2 64Bits 7750 2.7GHz Black Edition
MoBo: Asus M2 ou M3.
VGA: XFX Geforce 9800 GTX 512MB ou 1GB/256Bits
HD: Seagate 1TB
PSU: ATX 600w REAIS
RAM: 4GB Ram DDR2 Kingstone @800MHz [2x2Gb]
Avatar do usuário
Fabio914
Mensagens: 1757
Registrado em: Dom Mai 21, 2006 4:38 pm
Answers: 0
17
Localização: Sampa/Sanca
Contato:

Re: Linguagem de programação do Fabio!

Mensagem por Fabio914 »

Rico escreveu:Bom, o que temos aqui é um interpretador Just in Time.
Tempo real.
Por enquanto binários fora de questão :P
Eu não diria fora de questão... Fazer este programa gerar um código em assembly x86 não é algo tão complicado quanto possa parecer... Depois é só rodar um assembler e pronto... :wink:

EDIT

Versão nova.

Código: Selecionar todos

Changelog [v.0.00 -> v0.01]
 * [ADD] Funcoes Malloc e Free.
 * [FIXED] Agora é possível usar 'ifs' dentro de outras
   funções sem dar problema na leitura do arquivo. 
 * Novo programa exemplo.
Hoje eu acabei não trabalhando muito na linguagem mas fiz a pequena correção do 'if' e adicionei
funções de alocação dinâmica de memória (para vetores), o que ainda é inútil pois eu ainda não fiz funções para acessar as posições de memória alocadas dinamicamente...

Download
lang_v001_bin.rar
(8.04 KiB) Baixado 22 vezes
Assim que eu tiver algum nome para essa linguagem eu vo criar um projeto pra ela no SourceForge e disponibilizar o código fonte (que alias, é bem simples).

Off: Estou pensando em nomea-la SmartC ou só Smart...

Quem quiser pode dar sugestões sobre a implementação de uma biblioteca padrão (que pode incluir até funções de modo gráfico), alias quem quiser implementar alguma função me avise (a implementação de uma função no interpretador é algo bem simples, é quase como escrever uma função em C), vejam o trecho de código que descreve a implementação de AttributeVariable():

Código: Selecionar todos

/* trecho do codigo da funcao Rodar(); no ling_exec.c */
   else if(strcmp(func_nome,"AttributeVariable")==0){

      char *nome_var;
      char *nome_var2;

      parser_Match('(');
      nome_var = parser_GetVar_s();
      parser_Match(',');
      nome_var2 = parser_GetVar_s();
      parser_Match(')');
      parser_Match(';');

      Var *aux, *aux2;
      aux = BuscaVar(nome_var);
      aux2 = BuscaVar(nome_var2);

      if(aux->tipo != aux2->tipo)
         parser_Error("Impossivel atribuir, tipos diferentes.");
      else {
         switch(aux->tipo){
            case INT: aux->_int = aux2->_int; break;
            case FLOAT: aux->_float = aux2->_float; break;
            case CHAR:  aux->_chr = aux2->_chr; break;
            case STRING: strcpy(aux->_str,aux2->_str); break;
            case POINTER: aux->_point = aux2->_point; break;
            default : parser_Error("Impossivel atribuir valor"); break;
         }
      }

      /* Adicionar limpeza de strings aqui! */

   }
/* ... */
Falows! :wink:
Projetos em andamento
the Core
Eclipse

Projetos parados
Doom 3 on GZDoom
FSD Project

PC
AMD Athlon 64 X2 5200+ (2x 2.6Ghz)
2GB RAM (2x 1GB DDR2)
240GB (160GB SATA + 80GB SATA)
XFX nVidia GeForce 8600 GT (600mhz 256mb)
Placa Mãe ASUS M2N4 SLI (2x PCI-E 16x SLI, 4x DDR2 800, nForce 4)
Fonte 500W reais (esqueci o nome da marca)
Monitor LG Flatron 19'' LCD
Avatar do usuário
DU0
Mensagens: 6689
Registrado em: Sáb Abr 01, 2006 6:59 am
Answers: 0
18
Localização: Deimos Lab.
Contato:

Re: Linguagem de programação do Fabio!

Mensagem por DU0 »

Hum, eu vou testar isso quando chegar em casa [to usando furtivamente aqui o notebook da patroa]

By the way, pra que serve a tal da função? Tipo, nas linguagens que eu usei [Pascal, C++, etc] iIa direto pra main, talvez com uma ou outra bobagem antes [como declaração de bibliotecas ou classes]

:/
Jogando atualmente:
Xbox 360: Ninja Gaiden Black
Xbox One: Need for Speed: Hot Pursuit, Yakuza 3
PlayStation 2: Fatal Frame 3: The Tormented
PlayStation 3: RE: The Darkside Chronicles, RE: The Umbrella Chronicles
Nintendo Switch: Phantasy Star, SIFU
Rico
Mensagens: 2354
Registrado em: Dom Set 10, 2006 11:49 am
Answers: 0
17
Localização: Atrás do DU0
Contato:

Re: Linguagem de programação do Fabio!

Mensagem por Rico »

@DU0
Você define alguma ação, uma procedure que deve ocorrer naquele momento, podendo colocar valores ou não.

Código: Selecionar todos

vezes(int a,int b) {
    return(a*b);
}

int main() {
    int i;
    int u;
    int res;

    printf("Coloque primeiro numero: ");
    scanf("%d",&i);
    printf("Coloque segundo numero: ");
    scanf("%d",&u);
    res=vezes(i,u);
    printf("Resultado: %d",res);
    return(0);
}
É fabio eu sei, ta faltando coisa aee... mas eu to meio ocupado... acerta ae o que estiver faltando.
[xfire]p0br3[/xfire]
Futuro PC:

CPU: AMD Athlon x2 64Bits 7750 2.7GHz Black Edition
MoBo: Asus M2 ou M3.
VGA: XFX Geforce 9800 GTX 512MB ou 1GB/256Bits
HD: Seagate 1TB
PSU: ATX 600w REAIS
RAM: 4GB Ram DDR2 Kingstone @800MHz [2x2Gb]
Avatar do usuário
Fabio914
Mensagens: 1757
Registrado em: Dom Mai 21, 2006 4:38 pm
Answers: 0
17
Localização: Sampa/Sanca
Contato:

Re: Linguagem de programação do Fabio!

Mensagem por Fabio914 »

É bem isso que o Rico falou mesmo... Definir procedimentos ou funções mesmo (que retornam valores para serem usados)...

Alias... DU0, se teu código não rodar no interpretador ainda, experimente coloca-lo inteiro em uma unica linha (a primeira linha do arquivo) e tirar todos os comentários. Eu estou obtendo o mesmo problema no Linux (problema esse que eu já obtinha no UDMF), parece que o parser só funciona se tiver tudo na mesma linha, mas ele lê o \n corretamente pelo que eu pude constatar...
Projetos em andamento
the Core
Eclipse

Projetos parados
Doom 3 on GZDoom
FSD Project

PC
AMD Athlon 64 X2 5200+ (2x 2.6Ghz)
2GB RAM (2x 1GB DDR2)
240GB (160GB SATA + 80GB SATA)
XFX nVidia GeForce 8600 GT (600mhz 256mb)
Placa Mãe ASUS M2N4 SLI (2x PCI-E 16x SLI, 4x DDR2 800, nForce 4)
Fonte 500W reais (esqueci o nome da marca)
Monitor LG Flatron 19'' LCD
Rico
Mensagens: 2354
Registrado em: Dom Set 10, 2006 11:49 am
Answers: 0
17
Localização: Atrás do DU0
Contato:

Re: Linguagem de programação do Fabio!

Mensagem por Rico »

E pelo que nos parece Fabio, nosso querido FGETS/FREAD/FGETC são meio frescurentos.
Precisam de TODA ajuda possível para rodar.

Exemplo teve eu hoje, agora mesmo, enquanto eu fazia algo para o UDMF e como teste só consegui sucesso com este código.

Código: Selecionar todos

/* Inicio de um possível WAD READER para UDMF, abrir lumps e colocar num cache onde que depois o Olympus irá interpretar. */


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

#define LEN 255 // Maximo de chars no nome do arquivo

int main(int argc, char *argv[]) {

    int len;
    char wadfile[LEN];
    char WAD_TYPE[5];
    char buffer[5];

    FILE *wad;

    if(fgets(wadfile,sizeof(wadfile),stdin)) {
        len = strlen(wadfile) - 1; // Posição anterior ao '\0'
        // Se houver nova linha, remove-a
        if(wadfile[len]=='\n')
            wadfile[len]='\0';
    }

    wad = fopen(wadfile,"r");
    if(fgets(buffer,5,wad)) {
        sscanf(buffer,"%s",&WAD_TYPE);
    }
    if(strcmp(WAD_TYPE,"PWAD")==0) {
        printf("%s = PWAD",wadfile);
    } else if(strcmp(WAD_TYPE,"IWAD")==0) {
        printf("%s = IWAD",wadfile);
    } else {
        printf("WAD Invalido");
    }
    getchar();
    return(0);
}
Acredite, recebi muitos avisos de memória não alocada (cannot be write, read, culpa do FGETS/C por causa do \0... acredita nisso?).
Revise o código do UDMF, com esta possível solução do -1 ('\0') no nome.
[xfire]p0br3[/xfire]
Futuro PC:

CPU: AMD Athlon x2 64Bits 7750 2.7GHz Black Edition
MoBo: Asus M2 ou M3.
VGA: XFX Geforce 9800 GTX 512MB ou 1GB/256Bits
HD: Seagate 1TB
PSU: ATX 600w REAIS
RAM: 4GB Ram DDR2 Kingstone @800MHz [2x2Gb]
Avatar do usuário
Fabio914
Mensagens: 1757
Registrado em: Dom Mai 21, 2006 4:38 pm
Answers: 0
17
Localização: Sampa/Sanca
Contato:

Re: Linguagem de programação do Fabio!

Mensagem por Fabio914 »

Rico! SEM MAIS PROBLEMAS!!!!!!!!!!!!!!!

DESCOBRIIIIIIIII!

No Windows um arquivo de texto tem quebra de linha com '\n', em sistemas NIX a quebra de linha é '\r' !!!!

Agora da pra fazer funcionar o UDMF Editor e esse interpretador! :wink:
Projetos em andamento
the Core
Eclipse

Projetos parados
Doom 3 on GZDoom
FSD Project

PC
AMD Athlon 64 X2 5200+ (2x 2.6Ghz)
2GB RAM (2x 1GB DDR2)
240GB (160GB SATA + 80GB SATA)
XFX nVidia GeForce 8600 GT (600mhz 256mb)
Placa Mãe ASUS M2N4 SLI (2x PCI-E 16x SLI, 4x DDR2 800, nForce 4)
Fonte 500W reais (esqueci o nome da marca)
Monitor LG Flatron 19'' LCD
Rico
Mensagens: 2354
Registrado em: Dom Set 10, 2006 11:49 am
Answers: 0
17
Localização: Atrás do DU0
Contato:

Re: Linguagem de programação do Fabio!

Mensagem por Rico »

É... fui ler sobre o Carriege Return... bota tudo como \r\n que vai funcionar... ._________.
Depois ler fórums de UNIX...


olha UDMF Editor
[xfire]p0br3[/xfire]
Futuro PC:

CPU: AMD Athlon x2 64Bits 7750 2.7GHz Black Edition
MoBo: Asus M2 ou M3.
VGA: XFX Geforce 9800 GTX 512MB ou 1GB/256Bits
HD: Seagate 1TB
PSU: ATX 600w REAIS
RAM: 4GB Ram DDR2 Kingstone @800MHz [2x2Gb]