Página 2 de 3

Re: Linguagem de programação do Fabio!

Enviado: Sex Fev 12, 2010 12:34 pm
por xducke
Hahaha... eu tambem volto as aulas dia 22 de fev.
Estou acelerando todos os meus projetos aqui :lol:

Re: Linguagem de programação do Fabio!

Enviado: Sex Fev 12, 2010 12:41 pm
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!

Re: Linguagem de programação do Fabio!

Enviado: Sex Fev 12, 2010 6:44 pm
por Rico
Bom, o que temos aqui é um interpretador Just in Time.
Tempo real.
Por enquanto binários fora de questão :P

Re: Linguagem de programação do Fabio!

Enviado: Sex Fev 12, 2010 6:47 pm
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 114 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:

Re: Linguagem de programação do Fabio!

Enviado: Sex Fev 12, 2010 8:01 pm
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]

:/

Re: Linguagem de programação do Fabio!

Enviado: Sex Fev 12, 2010 8:33 pm
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.

Re: Linguagem de programação do Fabio!

Enviado: Sex Fev 12, 2010 9:13 pm
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...

Re: Linguagem de programação do Fabio!

Enviado: Sex Fev 12, 2010 9:24 pm
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.

Re: Linguagem de programação do Fabio!

Enviado: Sex Fev 12, 2010 9:31 pm
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:

Re: Linguagem de programação do Fabio!

Enviado: Sex Fev 12, 2010 10:06 pm
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