Executando verificação de segurança...
4

Meu projeto mais bem feito até então

Eu ja fiz muitos projetos, porem dessa vez algo foi diferente.

To falando do lex.h, uma lib bem pequena, porém muito massa, feita para construir lexers de forma fácil e flexível em C.

A lib inteira é stack-centric, então não há necessidade de desalocar nada que vc mesmo não tenha criado.

Apesar de eu ter trabalhado nela só uns 3 dias até agora, acho q ela é um dos projetos mais sólidos q já fiz até então. Totalmente documentada, e cheia de opções e utilitários bem maneiros... Fiz até um interpretador de BrainF*ck com ela kkk

O que me motivou a fazer a lib, é que eu sempre quis fazer uma linguagem, desde quando comecei a programar, porém em todos os tentativas tive diferentes níveis de sucesso. Atualmente tenho assistido muitas lives do Tsoding, o q me motivou ainda mais a seguir esse caminho de programação em C, bibliotecas single-headed, etc.

Por isso, a lex.h atualmente é um dos meus projetos favoritos, e tenho certeza que se você, assim como eu, adora brincar com o código e construir coisas do zero, também irá gostar bastante.

Gostaria de contar com vocês para deixar uma estrela no projeto, e quem sabe usar ela pra alguma prova de conceito, ou mesmo contribuir com código ou documentação para o projeto, afinal de contas, o mundo Open Source é muito massa! ❤️

Carregando publicação patrocinada...
2

Que interessante! Eu sou nova no OpenSource e no assunto de desenvolvimento de linguagens de programação. Fiquei com uma dúvida, a sua intenção é que a biblioteca consiga gerar lexers para qualquer linguagem?

1

Sim, embora seja muito simples, a lib consegue ser bem generalista.

O workflow dela é bem simples:

Primeiro você define um LexTypeArray, que contem as regras pra cada token. Cada regra é basicamente uma função q lê a entrada e retorna o tamanho da match. A própria lib ja vem com algumas prontas pra coisas comuns tipo white-space e identificadores.

So com isso, tu ja cria o lexer:

Lex lex = lex_init(tkarray, "codigo a ser tokenizado");

Pra consumir os tokes é bem simples, tem basicamente 3 funções:

primeiro tu usa lex_current pra obter um token. essa função vai dar false se chegar no fim do arquivo, ou se houver erro.

Depois q vc ja tem o token, vc pode usar lex_consume ou lex_skip para consumir determinados tipos de token (isso é util pra fazer parsing). Essas funções meio q são um filtro, q condicionalmente pulam pro próximo token.

E por fim, vc pode usar lex_move para mover pro próximo token (esse é sem condições).

A lib em si foca muito em facilitar a criação das regras, com um monte de funções para fazer matching (lex_match_*), ou mesmo para trabalhar direto com o cursor (lex_cur*).

Além disso, para fazer debug, existe o lex_print_hl, q faz meio q um sintax-highligher automatico pra vc ver como o lex ta entendendo cada token.

Nos últimos commits eu fiz o lex_print_profiler também, q mostra estatísticas da lib, o q é muito util para otimizar. So q para usar tem q habilitar com um define antes de incluir a lib:

#define LEX_PROFILER

E melhor de tudo: super rápida e totalmente na stack. não precisa fazer free em nada.

2
1

Opa, nostalgia pura kkk

Tanto tempo q não mecho com java, acho q nem sei mais...

Agora q to com um notebook velhinho to so mechendo mais em C, pq é muito mais leve pra rodas as ferramentas kk

Mais ta sendo divertido botar o Pentium pra trabalhar, tirando o máximo desse dinossauro kkkkk

2
1

Eu usava termux. Usei por muito tempo, mas hj eu to com um notebook de 2007 (2gb de RAM), com Ubuntu.

É mais fraco q o celular sem duvida, mas tem muito menos das limitações impostas pelo android e a platforma ARM.

2

Cara, Eu me interessei mais pelo seu colorGenerator.

Talvez o lex.h seja realmente mais interessante, mas o colorGenerator tem mais apelo visual e é mais fácil de acessar.

De qualquer maneira devo dizer que você parece mesmo gostar de escrever código.
Eu acessei seus repositórios e ví que você manda bem.
A gente devia trabalhar junto em algum projeto.

Eu também acessei seus textos aqui no tabNews e achei interessante também.