Giter VIP home page Giter VIP logo

minishell's Introduction

breathing tree, paula hemsi 2020 with p5js

Hi there! I'm Paula Hemsi, an avid self-learner, graduated from école 42 and software engineer at Uber. I've been passionate about logic since childhood, but the last years of my life were spent around stages and backstages, until the pandemic arrived in Brazil. In 2020 programming arrived in my life and I'm totally in love with it since then.

I'm also deeply interested in knowing other cultures, it would be marvelous to live in different places, tasting different cuisines, getting to know new landscapes and philosophies.


  • 🌱 Always learning
  • 💻 Software engineer at Uber
  • 👩‍🚀 Graduated from 42 São Paulo
  • :octocat: Languages: C, C++, Python, JS, Go, TS
  • 🕹️ Wanna play any of the games I made?
  • 🎭 I used to be creative director, actress and awarded light designer. You can take a look at some of my works with ultraVioleta_s company here:
  • 💬 Ask me about anything, I'm happy to help
  • 🪁 Hobbies: electronics, board games and creative coding
  • ⚡ Fun fact: I lived on a circus 🎪 and I love the cold weather ❄️

Top Langs

Paula's GitHub stats

minishell's People

Contributors

laisarena avatar lrcouto avatar paulahemsi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

minishell's Issues

Implementar sistema de expansão.

  • Implementar um sistema que expanda variáveis quando necessário, tanto as que estiverem no environment quanto as que estiverem armazenadas localmente.

  • Substituir o placeholder da expansão das variáveis para busca do valor da variável primeiro nas variáveis de ambiente e depois nas locais (se não existir, string vazia)

Implementar prompt

Implementar as funções necessárias para mostrar uma mensagem de prompt para o usuário.

Whitespaces antes do comando.

No bash, um comando pode ser reconhecido mesmo que seja precedido por whitespaces. Precisamos implementar uma solução que limpe os whitespaces no início da nossa string de input.

Implementar armazenamento local de variáveis.

Variáveis que foram definidas pelo input mas ainda não foram exportadas para o environment precisam ser armazenadas em algum lugar. Essa estrutura precisa ser definida e implementada.

Implementar echo

Reproduzir a implementação da função echo com a opção -n

Implementar tokenizador

  • separar as palavras recebidas do prompt em tokens de acordo com a classificação:
  • T_BUILTIN echo cd pwd export unset env exit
  • T_OPERATOR | = > < >> <<
  • T_LITERAL
  • implementar expansão das variáveis dentro de uma string entre aspas

Escrever strjoin variádica.

É um saco ter que chamar várias joins pra concatenar vários argumentos. Seria legal ter uma função que fizesse isso tudo de uma vez.

lista duplamente encadeada

transformar lista de tokens em lista duplamente encadeada para poder implementar o T_FILE em relação ao token anterior

Implementar env

Reproduzir a implementação da função env, sem nenhum argumento.

Diagrama sintaxe

Fazer diagrama do processo de análise de sintaxe e execução

Implementar REPL

Implementar um Read-Evaluate-Print Loop que será a base do programa.

Implementar cd

Reproduzir o comportamento da função cd, que deve funcionar com um path como argumento, ou com argumentos como ~ e -

Implementar exit

Reproduzir o comportamento da função exit, sem nenhum argumento adicional.

Criar pipe checker

Escrever uma função que recebe a HEAD de uma lista encadeada e separa essa lista de acordo com a quantidade de pipes.

{
    while (!NULL)
    {
        IF (PIPE)
        {
            CMD_PARSER(HEAD, *PIPE)
            PIPE_CHECKER(*PIPE->NEXT)
        }
    }
    CMD_PARSER(HEAD, *PIPE)

}

Implementar unset

Reproduzir o comportamento da função unset, sem nenhum argumento adicional.

Fazer o command parser

  • fazer pipe / dup do pipe
  • verificar redirects, criar arquivos e fazer dups
  • chamar a função do path
  • chamar a execução

Implementar export

Reproduzir o comportamento da função export, que deve funcionar sem argumentos ou com uma variável de ambiente como argumento.

Adicionar tipos ao tokenizer

adicionar os tipos:

  • T_PIPE para |
  • T_REDIRECT para < >> >
  • T_HERE_DOC para <<
  • T_FILE para o que vier depois dos redirects

Implementar termcaps - I/O

Implementar os sistemas do termcaps relacionados ao input do usuário, que reproduzem o comportamento do STDIN.

Setar sinalização de erro do processo.

Um dos requisitos do projeto é que o comando echo $? retorna o código de erro do último comando, sendo 0 para uma saída com sucesso ou outro número para um comando que falhou. A gente precisa setar esse valor em todos os nossos casos de erro para que a builtin echo consiga usá-lo.

Implementar pwd

Reproduzir o comportamento da função pwd, sem argumentos adicionais.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.