Skip to content

Extensão para o VS Code que faz o highlighting da syntax de Algoritmo, utilizado nas disciplinas de Algoritmos e Estruturas de Dados.

License

Notifications You must be signed in to change notification settings

femadevspace/femascript-lang

Repository files navigation

FemaScript Lang

FemaScript (de codenome 'Almiritmo') é uma linguagem de programação desenvolvida para a disciplina de Algoritmo e Estrutura de Dados na FEMA. Inspirada no Portugol, a FemaScript vem com nossa própria "cara", ajustada para melhor atender às necessidades do currículo acadêmico e facilitar o aprendizado dos alunos em seus primeiros passos na programação.

Banner da linguagem FemaScript

🔭 Visão Geral

FemaScript foi projetada para ajudar os alunos a aprender algoritmos e estruturas de dados de maneira intuitiva e acessível. Com sintaxe clara e recursos pedagógicos, os alunos podem se concentrar na lógica de programação antes de explorar o universo infindável de possibilidades que outras linguagens de programação podem oferecer.

Neste repositório você encontrará o código-fonte da extensão para o Visual Studio Code (vscode) que oferece suporte a FemaScript, proporcionando syntax highlighting (realce/colorização de sintaxe), formatação automática e, em breve, capacidades de compilação para outras linguagens, permitindo a execução de algoritmos desenvolvidos em FemaScript.

🌟 Recursos

  • Realce de Sintaxe: A extensão para o VSCode oferece syntax highlighting para tornar o código mais legível.
  • Formatador de Código: Ajusta automaticamente o estilo do código para manter a consistência.
    • Windows: Shift + Alt + F
    • MacOS: Shift + Option + F
    • Linux: Ctrl + Shift + I
  • Erro de Sintaxe em Tempo Real: Indicação de erros de sintaxe enquanto você digita, tornando o processo de desenvolvimento mais eficiente.
  • Snippets: Blocos de código predefinidos para acelerar a escrita de estruturas comuns da linguagem..
  • 🎯 Futuramente... Compilador Multilíngue: Planejamos adicionar suporte para compilar FemaScript em outras linguagens, permitindo que os alunos executem seus algoritmos em diferentes ambientes.

🚀 Instalação

Badge da versão atual da extensão Badge da quantidade de instalações da extensão Badge da quantidade de downloads da extensão

Banner do pacote de extensões essenciais do vscode Esta extensão está presente no Pacote de Extensões FEMA Essentials Bundle.

Você pode acessar diretamente o Visual Studio MarketPlace para instalar ou baixar a extensão entrando no link anterior ou em qualquer badge (botão) a cima.

Para instalar via command line, você deve ter instalado o comando code acessando o link anterior. Após isso, execute o seguinte comando no terminal:

code --install-extension fema-devspace.femascript-lang

🧑🏽‍🚀 Primeiros Passos

Escrevendo seu Primeiro Programa em FemaScript

Você já deve estar familiarizado com a estrutura básica de um algoritmo. Agora, vamos transferir esse conhecimento para o ambiente digital! Após instalar a extensão, crie um arquivo com o nome de sua escolha, mas certifique-se de que ele tenha uma das seguintes extensões: .alg, .algoritmo, .algorithm, .fema ou .femascript.

Se tudo estiver correto, você verá a logo da Logo da linguagem FemaScript FEMA no ícone do arquivo. Agora, vamos inserir a estrutura básica do seu algoritmo

Exemplo de código em FemaScript

O algoritmo para 'calcular circunferência' apresentado acima inclui vários elementos essenciais: o nome do algoritmo, a inicialização de constantes e variáveis, a lógica do cálculo e o uso de funções como "LEIA" e "IMPRIMA". Para explorar mais sobre as funcionalidades da linguagem, incluindo sintaxes, palavras-chave e outros detalhes, consulte a Wiki da linguagem (🚧 em construção 🚧).

Enquanto a Wiki não é publicada, aqui está uma tabela de instruções que você utilizar.

Instruções, suas alternativas e sinônimos

Instrução Alternativas & Sinônimos
🔑 Palavras-chaves
ALGORITMOALGORITHM
TIPOTIPOS | TYPE | TYPES
CONSTCONSTANTE | CONSTANTES | CONSTANT | CONSTANTS
VARVARIÁVEIS | VARIABLES
INÍCIOSTART
FIMEND
SEIF
ENTÃOTHEN
SENÃOELSE
FAÇADO
ENQUANTOWHILE
PARAFOR
AVALIEANALISE | CHECK | TESTE | TEST
QUANDOCASO | CASE | WHEN
CASO_CONTRÁRIOCASOCONTRÁRIO | PADRÃO | DEFAULT
NÃONOT
OUOR
EAND
IMPRIMAIMRPIMIR | PRINT | ESCREVA | ESCREVER | WRITE
LERLEIA | READ
🔎 Tipos de Variáveis
enumenumeração | enumerate
realreais | reals
inteiroint | integer | integers | inteiros
caractercaracteres | char | chars | character | characters
textotextos | text | texts | string | strings
lógicológicos | bool | bools | boolean | booleans | booleano | booleanos | logic | logical | logicals
arranjoarray | lista | list | matrix | matriz | vector | vetor
deof
🔠 Literais
verdadeirotrue
falsofalse
nulonull
🔣 Símbolos
Atribuição<- | ++ | --
Operadores Aritméticos+ | - | * | / | %
Operadores Relacionais= | != | >= | > | <= | <
Operadores Lógicos~ | ! | ? | & | && | | | ||
🪄 Extras
Comentários Em linha: // comentário
Em bloco: /* comentário */

Estrutura de Declarações (statements)

* Snippets são pequenos trechos de código que você pode usar para acelerar o desenvolvimento e garantir consistência em seu trabalho. Em vez de digitar repetidamente o mesmo código, você pode usar snippets para inserir rapidamente estruturas de código comuns ou padrões. Eles economizam tempo e ajudam a evitar erros ao criar código. Para utilizar-los basta escrever a palavra chave que está na coluna de "Snippet", o VSCode irá mostrar uma janela e, então, basta apertar "Enter" para inserir o Snippet
Declaração *Snippet Estrutura
Se/Senão (if/else) se | senao Exemplo da estrutura de uma declaração se/então
Enquanto/Faça (while/do) enquanto | facaenquanto Exemplo da estrutura de uma declaração faça/enquanto Exemplo da estrutura de uma declaração enquanto/faça
Para (for) para Exemplo da estrutura de uma declaração para (for statement)
Avalie (switch) switch | case Exemplo da estrutura de uma declaração avalie (switch statement)

🤝 Contribuição

Estamos abertos a contribuições de alunos e interessados. Para contribuir:

  1. Faça um fork do projeto.
  2. Crie um branch para suas modificações (git checkout -b minha-modificacao).
  3. Envie suas modificações para o branch (git push origin minha-modificacao).
  4. Abra um pull request detalhando suas alterações.

Atenção: Este projeto foi desenvolvido utilizando a ferramenta Bun. Para executá-lo corretamente, por favor, instale as dependências (bun install) e utilize os comandos específicos do Bun, como bun run dev, para rodar o projeto. Run with bun!

👽 Problemas (Des)conhecidos

Se você encontrar qualquer comportamento inesperado ou suspeitar de um bug, consulte a seção de Issues Abertas do repositório. É possível que o problema já tenha sido relatado por outros usuários ou que esteja em processo de resolução.

Se o problema que você encontrou não estiver listado, sinta-se à vontade para abrir uma nova issue fornecendo o máximo de detalhes possível para ajudar a identificar e corrigir o problema. Agradecemos sua contribuição!

✨ Créditos

Este projeto foi iniciado em meados de 2024 por Thiago Ausechi, então aluno do 1º ano de Ciências da Computação, com o apoio e orientação dos docentes da área de Informática da FEMA.

Além disso, vários projetos foram explorados para possibilitar o desenvolvimento desta linguagem. Em especial, gostaríamos de expressar nosso profundo agradecimento à biblioteca Chevrotain por facilitar grande parte do trabalho complexo de análise e processamento da linguagem.