Skip to content

TonyALima/EmojiCompiler

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A Linguagem de Emojis (LE) é uma linguagem de programação baseada em emojis, inspirada na estrutura e sintaxe da linguagem C. O objetivo principal foi substituir os símbolos convencionais de C por emojis, criando assim uma nova forma de expressar lógica de programação.

Símbolos

A Linguagem utiliza uma combinação de emojis para representar diversos elementos da linguagem C, como:

  • Tipos de dados :

    • Caracteres ASCII (char): 🔤
    • Inteiro (int): ℹ️
    • Real (float):☁
    • Vazio (void): 🥚
    • Bool (bool): 🐃
  • Comandos:

    • Atribuição (=): 🟰
    • Entrada (scanf): 🔍
    • Saída (printf): 🖨
    • Condicional
      • if: 🤔
      • else: 🙄
    • Repetição
      • while: 🧄
      • for: 🍀
  • Operadores

    • Relacionais
      • Igualdade (==) : 🟰🟰
      • Diferença (!=): ❗🟰
      • Maior (>): 🙌
      • Menor (<): 🤏
      • Maior igual (>=): 🙌🟰
      • Menor igual (<=): 🤏🟰
    • Lógicos
      • Conjunção (&&): 🤝
      • Disjunção (||): 🖖
      • Negação (!): ❗
    • Aritméticos
      • Adição (+): ➕
      • Subtração (-): ➖
      • Multiplicação (*): ✖
      • Divisão (/): ➗
      • Resto (mod)(%): 💩
  • Símbolos especiais

    • Chaves {} : 👉👈
    • Parênteses (): 🤜🤛
    • Colchetes []: 👇👆
    • Virgula “,”: ❤
    • Ponto e vírgula “;”: ❣
    • Ponto final “.”: 💥
    • Aspas simples (’): 🙏
    • Aspas duplas ("): 🙏
  • Blocos de comandos

    • begin/end ({}): 👉👈
  • Palavras reservadas

    • true: 👍
    • false: 👎
    • break: ❌
    • continue: ✅
    • return: 🔄
    • main: 👨

Regras:

Para utilizar a linguagem basta substituir os termos pelos emojis respectivos. Exemplo:

int main (){
    return 0;
}
ℹ️ 👨 🤜🤛 👉
    🔄0❣
👈

Declaração e Atribuição:

A interação da LE com valores e nomes de variáveis também é a mesma da Linguagem C

int a = 5;
ℹ️ a 🟰 5
char b = 'b';
🔤 b  🙏b🙏❣
bool c = true;
🐃 c 🟰 👍❣
float d = 5.0;
☁ d 🟰 5💥0

A linguagem também aceita declarações com atribuições ou sem e sequencias de declarações de um tipo especificado, por exemplo:

float  r=5.1 , p=3.141592654 , v;
☁ r🟰5💥1p🟰3💥141592654v

O nome das variaveis seguem o automato NOME, o qual irá aceitar qualquer sequencia que comece com uma letra minuscula seguida de números e/ou letras minúsculas.

Leitura e Escrita

  • A função printf funciona da mesma maneira, note que as aspas simples e duplas possuem o mesmo emoji.

    printf("digite um numero = ");
    🖨🤜🙏digite um numero = 🙏🤛❣

    A regra também aceitará o anexo de valores

    printf("Volume da esfera de raio %f: %f\n",r,v);
    🖨🤜🙏Volume da esfera de raio %f: %f\n🙏❤rv🤛❣
  • A função scanf mantém sua estrutura, porém sem a necessidade do operador de referência & que é inserido pelo tradutor.

    scanf("%d",&a);
    🔍🤜🙏%d🙏❤a🤛❣ 

Estruturas Condicionais

  • Para condicionais, implementamos somente expressão if.
    if(a==0){}
    🤔🤜a🟰🟰0🤛👉👈

Estruturas de Repetição

Loopings também são similares, implementamos a estrutura for e while.

  • for : Mantemos a estrutura de 3 segmentos inicialização, condição e incremento/decremento.
    for(i=0;i<5;i=i+1){}
    
    🍀🤜i 🟰 0i🤏5i 🟰 i1🤛👉👈
  • while :
    while (true) {}
    
    🧄 🤜 👍 🤛 👉👈

Observações

Em relação aos automatos declarados no planejamento da linguagem não foram implementadas o reconhecimento de declaraçõs e chamadas de funções.

Uso

Para uso da linguagem utilize arquivo main.py, utilizando como argumento o arquivo de extensão .emo e opcionalmente um nome para o arquivo .c e .exe de saída. Através do direotorio principal execute:

python main.py <file.emo> [<output_name>]
  • <file.emo>: Arquivo de entrada com o código a ser interpretado
  • <output_name>: Nome para o arquivo de saída.
    • Opcional, valor padrão: "output"

Também é possivel colocar manualmente o código a ser intepretado na variavel codigo neste arquivo principal.

A execução do arquivo demonstrará a Analise lexica, sintática e a tradução do código para o código em linguagem C, a compilação do mesmo assim como a execução em um terminal separado de forma automatica, caso não haja erros. O executavel e o arquivo C serão gerados no diretorio out

Para a implementação da Analise léxica e sintatica utilizamos a biblioteca ply em python.

Essa é a unica biblioteca externa a ser instalada e pode ser obtida pela ferramenta pip

pip install -r requirements.txt

ou de forma mais direta

pip install ply==3.11
  • Analise Léxica: Fará o reconhecimento de todos simbolos definidos, utilizando o modulo ply.lex
  • Analise Sintatica: Fará o uso das regras, automatos definidos para reconhecer e aceitar a sintaxe da linguagem. Demonstrará de forma hierarquica todas as estuturas reconhecidas, caso não haja erros de sintaxe. Foi utilizado o modulo ply.yacc, este que gera os arquivos parser.out e parsertab.py, que configuram os estados das regras e configurações da biblioteca para interpretar nossa solução.
  • Tradutor: Irá criar e compilar o arquivo .c realizando a substituiçaõ de cada emoji pelo seu simbolo na linguagem C correspondente.

Exemplos

Para demonstrar o uso da linguagem foram criados alguns exemplos de códigos. Todos os código de exemplo estão no diretorio data:

  • HelloWorld.emo Este exemplo utiliza da estrutura de repetição for e de impressão printf, realizando o print de uma mensagem personalizada de "Hello World" 5 vezes seguidas.
    python main.py data/HelloWorld.emo hello
  • Paridade.emo Este exemplo utiliza da estrutura condicional if verificando se o número inteiro declarado é par utilizando o operador de resto de divisão.
    python main.py data/Paridade.emo par
  • VolumeEsfera.emo Este exemplo explora operações e declarações de variaveis em cascata, usando a formula de volume de uma esfera de determinado raio.
    python main.py data/VolumeEsfera.emo volume
  • InOut.emo Este exemplo explora o uso de leitura com scanf para armazenar um valor e imprimir uma operação com esse valor.
    python main.py data/InOut.emo input
compiladores.mp4

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 96.8%
  • C 3.2%