Projeto Sammer Language atualizado !

1. Projeto Sammer Language atualizado !

???
gokernel

(usa Linux Mint)

Enviado em 18/08/2018 - 11:40h


Olá Pessoal !

Só passando rapidinho para informar que a Summer Language foi REescrita e atualizada(32 e 64 bits) ... somente a "base".

Projeto aqui:
https://github.com/gokernel2017/Summer

Testada:
Windows 7 32 bits: JIT e VM
Slax 7 64 bits: JIT e VM.

Os planos são de portar para WEB ... para executar em modo ( JIT, VM e WEB ) sem modificar uma linha ... muito trabalho, mas "eu me divirto assim" ;).

O legal é que pode-se usar usando apenas o modo "string", exemplo:
summer -s "int a = 100, b = 200; a = b; a;" -d

OBS: O código disponível é somente a "base"(JIT e VM) ... depois organizarei melhor.





  


2. Re: Projeto Sammer Language atualizado !

???
gokernel

(usa Linux Mint)

Enviado em 19/08/2018 - 18:04h


Projeto atualizado !

Ficou + legível .

OBS: a "base" para chamar funções usa no máximo 5 argumentos ...

Testada:
01: Windows 7 32 bits | JIT e VM
02: Slax 7 64 bits | JIT e VM.

Por hoje é só ...


3. Re: Projeto Sammer Language atualizado !

???
gokernel

(usa Linux Mint)

Enviado em 23/08/2018 - 18:33h

Projeto atualizado com: módulo carregado dinamicamente ...




Exemplo de um módulo usando SDL 1.x


//-----------------------------------------------
//
// Module example using SDL 1.x
//
//-----------------------------------------------
//
module ("libSDL", "sdl"); // in Linux: "libSDL.so"
module ("SDL", "sdl"); // in Windows: "SDL.dll"

import ("sdl", "SDL_Init", "0i");
import ("sdl", "SDL_SetVideoMode", "iiiii");
import ("sdl", "SDL_Delay", "0i");
import ("sdl", "SDL_Quit", "00");

sdl.SDL_Init (32);

sdl.SDL_SetVideoMode (800, 600, 16, 0); // color 16

sdl.SDL_Delay (3000);

sdl.SDL_Quit ();



OBS:
Nas próxima versão vou mudar o nome da word ( import ) para não confrontar com o modo WEB.




4. Re: Projeto Sammer Language atualizado !

???
gokernel

(usa Linux Mint)

Enviado em 25/08/2018 - 12:17h

Projeto atualizado:

01: if
02: for
03: function
04: # ifdef
05: # endif
06: console.log();

OBS: Não testei no Linux ... soneca ... ;)

Exemplo:

//-----------------------------------------------
//
// Module example using SDL 1.x
//
//-----------------------------------------------
//
int data = 500;

#ifdef WIN32
module ("SDL", "sdl"); // in Windows: "SDL.dll"
#endif
#ifdef __linux__
module ("libSDL", "sdl"); // in Linux: "libSDL.so"
#endif

import ("sdl", "SDL_Init", "0i");
import ("sdl", "SDL_SetVideoMode", "iiiii");
import ("sdl", "SDL_Delay", "0i");
import ("sdl", "SDL_Quit", "00");

sdl.SDL_Init (32);

data = sdl.SDL_SetVideoMode (800, 600, 16, 0); // color 16

sdl.SDL_Delay (3000);

sdl.SDL_Quit ();

display (data);

//-----------------------------------------------





5. Re: Projeto Sammer Language atualizado !

???
gokernel

(usa Linux Mint)

Enviado em 25/08/2018 - 17:40h

OPS !!!

Bug encontrado e corrigido no modo JIT !

No arquivo: src/asm.c
Na funcao: static void asm_change_jump (ASM *a);

Falta essa parte:

case ASM_JUMP_JNE:
{
int r = label_pos - jump_pos - 2;

if (r == (char)r) { // 2 bytes
// 75 08 jne 4012b1 < _code + number >
//
*(char*)(a->code+jump_pos) = 0x75;
*(char*)(a->code+jump_pos+1) = r;
} else {
// 0f 85 85 ed bf ff jne 401293 < _code + number >
//
*(char*)(a->code+jump_pos) = 0x0f;
*(char*)(a->code+jump_pos+1) = 0x85;
*(int*) (a->code+jump_pos+2) = (int)(label_pos - jump_pos - 6);
}
}
break;


Um código como esse não rodaria corretamente:

int i = 100;

if (!i) {
printf ("Value i: %d\n", i);
}



Já atualizado no github !!!



6. Re: Projeto Sammer Language atualizado !

Tiago de Jesus
tiago4171

(usa Arch Linux)

Enviado em 25/08/2018 - 17:46h

Olá amigo, gostaria de saber qual o propósito principal do projeto. Não sou desenvolvedor mas tenho alguns amigos que podem se interessar pelo seu projeto.
Se puder me explicar melhor eu ficaria grato.

Obrigado
---
"Pessoas sérias procedem com cautela"


7. Re: Projeto Sammer Language atualizado !

???
gokernel

(usa Linux Mint)

Enviado em 26/08/2018 - 02:00h

Olá "tiago4171" !

Esse projeto tem como objetivos:

01: Criar uma linguagem que use pouca codificação para fazer algo;
a: Exemplo para simplesmente imprimir Hello, usa assim:
"Hello";
OBS: não conheço nenhuma linguagem que faça isso ... simples né ?

b: Para rodar na WEB e como programa("compilado"), só precisaria algo como simplesmente isso:


var win1;

if (app_init(argc, argv)) {

win1 = app_new_window (100,100,300,240,"Janela PRIMEIRA");

app_run ();
}

Quem desenvolve para WEB sabe disso ... tem que usar um "monte" de ( .html, .js, .css );

02: Criar uma linguagem que seja muito portável ... C e WEB.

03: Criar uma linguagem "produtiva" ...

04: Criar uma linguagem de fácil REimplementação e rápida para compilar e que seja pequena ... vou usar parte dela em um Sistema Operacional próprio.

05: E por último ... criar uma linguagem que substitua a minha linguagem preferida atualmente, C. ...

A linguagem desenvolvo nas horas vagas ... por isso tem muita coisa ainda para implementar ...

Fique a vontade para perguntar + !!!

Obrigado pelo interesse em conhecer a Summer Language !!!



8. Re: Projeto Sammer Language atualizado !

Natsu Dragneel
Natsu_Dragneel

(usa XUbuntu)

Enviado em 26/08/2018 - 16:33h

E eu batalhando para fazer o "parser" e o "lexer"
Como você fez o lexer e o parser? Com alguma api?


9. Re: Projeto Sammer Language atualizado !

???
gokernel

(usa Linux Mint)

Enviado em 26/08/2018 - 19:40h

"Natsu_Dragneel", escreveu:
Como você fez o lexer e o parser? Com alguma api?

Para fazer o Parser e o Lexer, foi tempo aprendendo ... aqui tenho um livro sobre C que tem um Lex que é baseado neste... mas muito limitado.

Vai uma pequena modificação do lex:

O Parse que fiz usa esse modelo do lex.

Fiz pequeno só para vc entender ...


//-------------------------------------------------------------------
//
// Tiny Lexical Analyzer:
//
// FILE:
// lex.c
//
// COMPILER:
// gcc lex.c -o lex -Wall
//
//-------------------------------------------------------------------
//
#include <stdio.h>

#define LEXER_NAME_SIZE 255
#define LEXER_TOKEN_SIZE 1024 * 4

typedef struct LEXER LEXER;

struct LEXER {
char *text;
char name [LEXER_NAME_SIZE];
char token [LEXER_TOKEN_SIZE];
//
int pos; // text [ pos ]
int tok;
int line;
int level; // in: '{' level++; | in '}' level--;
};

enum {
TOK_INT = 255,
TOK_IF,
TOK_FOR,
TOK_BREAK,
TOK_FUNCTION,
//-----------------------
TOK_ID,
TOK_STRING,
TOK_NUMBER,
//-----------------------
TOK_PLUS_PLUS, // ++
TOK_MINUS_MINUS, // --
TOK_EQUAL_EQUAL, // ==
TOK_NOT_EQUAL, // !=
TOK_AND_AND, // &&
TOK_PTR // ->
};

//-------------------------------------------------------------------
//
// return tok number or 0.
//
//-------------------------------------------------------------------
//
int lex (LEXER *l) {
register char *p;
register int c;
int next; // next char

p = l->token;
*p = 0;

top:
//
// aqui c "pega" o valor ... mas nao incrementa a "texto" posicao
//
c = l->text[ l->pos ];


//############## REMOVE SPACE #############
//
if (c <= 32) {
if (c == 0) {
l->tok = 0;
return 0;
}
if (c == '\n') l->line++;
l->pos++; //<<<<<<<<<< increment position >>>>>>>>>>
goto top;
}


//################ STRING #################
//
if (c == '"') {
l->pos++; // '"'
//
// acumula o "string"
//
// OBS: se o string for maior que o tamanho do ( LEXER->token ) ... vai dar "problema" ... ENTENDE ?
//
//
while ((c=l->text[l->pos]) && c != '"' && c != '\r' && c != '\n') {
l->pos++;
*p++ = c;
}
*p = 0;

if (c=='"') l->pos++; else printf ("String erro\n");

l->tok = TOK_STRING;
return TOK_STRING;
}


//########## WORD, IDENTIFIER ... #########
//
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_') {
for (;;) {
c = l->text[l->pos];
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') {
l->pos++;
*p++ = c;
} else break;
}
*p = 0;

if (!strcmp(l->token, "int")) { l->tok = TOK_INT; return TOK_INT; }
if (!strcmp(l->token, "if")) { l->tok = TOK_IF; return TOK_IF; }
if (!strcmp(l->token, "for")) { l->tok = TOK_FOR; return TOK_FOR; }
if (!strcmp(l->token, "break")) { l->tok = TOK_BREAK; return TOK_BREAK; }
if (!strcmp(l->token, "function")) { l->tok = TOK_FUNCTION; return TOK_FUNCTION; }

l->tok = TOK_ID;
return TOK_ID;
}


//################# NUMBER ################
//
if (c >= '0' && c <= '9') {
for (;;) {
c = l->text[l->pos];
if ((c >= '0' && c <= '9') || c == '.') {
l->pos++;
*p++ = c;
} else break;
}
*p = 0;
l->tok = TOK_NUMBER;
return TOK_NUMBER;
}


*p++ = c;
*p = 0;
l->pos++;
l->tok = c;

return c;

}//: lex()

void lex_set (LEXER *l, char *text, char *name) {
if (l && text) {
l->pos = 0;
l->line = 1;
l->level = 0;
l->text = text;
if (name)
strcpy (l->name, name);
}
}//: lex_set()


int Parse (LEXER *l, char *text, char *name) {

lex_set (l, text, name);

while (lex(l)) {

printf ("TOKEN(%s)\n", l->token);

}
}

int main (void) {
LEXER l;
Parse (&l, "int a = 10, b = 20, c = 3, d = 5;", "string");
return 0;
}






10. Re: Projeto Sammer Language atualizado !

???
gokernel

(usa Linux Mint)

Enviado em 01/09/2018 - 12:03h

Projeto atualizado com float implementação ... falta + alguns ajustes.

Tive problemas em usar o note para conectar com a internet ... usando o smartphone.


11. Re: Projeto Sammer Language atualizado !

???
gokernel

(usa Linux Mint)

Enviado em 01/09/2018 - 12:08h

Projeto atualizado com float implementação ... falta + alguns ajustes.

Tive problemas em usar o note para conectar com a internet ... usando o smartphone.


var f1 = 1000.50, f2 = 5000.50;

console.log("Value float: %f\n", f1 + f2);




12. Re: Projeto Sammer Language atualizado !

???
gokernel

(usa Linux Mint)

Enviado em 02/09/2018 - 16:27h


Projeto atualizado com "for melhorado":

Antes só estava implementado ( for ), como um loop infinito: for (;;) { ... }

Agora já funciona assim:


var a, b;

for (a = 1; a < 5; a++) {

console.log ("Value a: %d\n", a);

for (b = 1; b < 5; b++) {

console.log ("B: %d\n", b);

}

}





01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts