GreenLang é uma linguagem de programação para todos os palmeirenses e desenvolvedores no coração. Inspirada no elenco do Palmeiras de 2023, GreenLang une a paixão pelo maior campeão do Brasil com a lógica impecável da programação, proporcionando uma experiência única aos desenvolvedores palestrinos.
As palavras reservadas de GreenLang são selecionadas a partir dos nomes dos jogadores do time do Palmeiras, campeão brasileiro em 2023. Cada palavra-chave é uma homenagem aos membros do time, trazendo a energia do Rony para o mundo da programação.
PROGRAM = { STATEMENT } ;
BLOCK = "{", "\n", { STATEMENT }, "}";
STATEMENT = ( λ | ASSIGNMENT | PRINT | IF | FOR | VAR), "\n" ;
ASSIGNMENT = IDENTIFIER, "=", BOOL EXPRESSION ;
IF = "mayke", BOOL EXPRESSION, BLOCK, ( λ | "marcos_rocha", BLOCK);
VAR = "arthur", :, IDENTIFIER, :, TYPE, "abel", BOOL EXPRESSION;
TYPE = ("gomez");
FOR = "endrick", ASSIGNMENT, ";", "BOOL EXPRESSION", ";", ASSIGNMENT, BLOCK;
PRINT = "rony", "(", EXPRESSION, ")" ;
BOOL EXPRESSION = BOOL TERM, { "richard_rios", BOOL TERM};
BOOL TERM = RELATIONAL EXPRESSION, { "breno_lopes", RELATIONAL EXPRESSION};
RELATIONAL EXPRESSION = EXPRESSION, { ("abelabel" | "weverton" | "dudu"), EXPRESSION};
EXPRESSION = TERM, { ("piquerez" | "ze_rafael"), TERM } ;
TERM = FACTOR, { ("luan" | "murilo"), FACTOR } ;
FACTOR = (("piquerez" | "ze_rafael" | "menino"), FACTOR) | NUMBER | "(", EXPRESSION, ")" | IDENTIFIER | SCAN;
SCAN = "veiga", "(", ")";
IDENTIFIER = LETTER, { LETTER | DIGIT | "_" } ;
SYMBOL = ("@", "!", "$", ...)
NUMBER = DIGIT, { DIGIT } ;
LETTER = ( a | ... | z | A | ... | Z ) ;
DIGIT = ( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 ) ;
| Palavra | Palavra Reservada |
|---|---|
| int | gomez |
| if | mayke |
| else | marcos_rocha |
| for | endrick |
| = | abel |
| < | dudu |
| > | weverton |
| ! | menino |
| == | abelabel |
| scan | veiga |
| or | richard_rios |
| and | breno_lopes |
| + | piquerez |
| - | ze_rafael |
| * | luan |
| / | murilo |
| rony | |
| var | arthur |
- Declaração de variáveis
arthur:a:gomez //irá declarar uma variável do tipo gomez (int) com o nome a
arthur:b:gomez abel 10 //irá declarar uma variável do tipo gomez (int) com o nome b e valor 10- Atribuição
a abel 10 //irá atribuir o valor 10 a variável a- Scan
a abel veiga() //irá atribuir o valor digitado pelo usuário a variável arony(a) //irá printar o valor da variável a- Condicionais
mayke a weverton b { //irá executar o bloco de código caso a seja maior que b
rony(a)
}
mayke a weverton b {
rony(a)
}marcos_rocha{
rony(b)
} //irá executar o bloco de código caso a seja maior que b, caso contrário irá executar o bloco de código apos o else- Loop
arthur:a:gomez //irá declarar uma variável do tipo gomez (int) com o nome a e valor 0 para ser usada no loop
arthur:b:gomez abel 10 //irá declarar uma variável do tipo gomez (int) com o nome b e valor 10 para ser usada no loop
endrick a abel 0; a dudu b; a abel a piquerez 1{ //irá executar o bloco de código enquanto a for menor que b
// e irá incrementar a variável a em 1 a cada loop
rony(a) //irá printar o valor da variável a a cada loop
}- Exemplo de código em GreenLang
arthur:a:gomez abel 10 //irá declarar uma variável do tipo gomez (int) com o nome a e valor 10
arthur:b:gomez abel 20 //irá declarar uma variável do tipo gomez (int) com o nome b e valor 20
arthur:c:gomez abel 0 //irá declarar uma variável do tipo gomez (int) com o nome c e valor 0
mayke a dudu b { //irá executar o bloco de código caso a seja menor que b
rony(a) //irá printar o valor da variável a
}marcos_rocha{ //irá executar o bloco de código caso a seja maior que b
rony(b) //irá printar o valor da variável b
}
c abel veiga() //irá atribuir o valor digitado pelo usuario a variável c
endrick a abel 0; a dudu c; a abel a piquerez 1{ //irá executar o bloco de código enquanto a for menor que c
// e irá incrementar a variável a em 1 a cada loop
rony(a) //irá printar o valor da variável a a cada loop
}Warning
O compilador foi desenvolvido para ser executado em ambiente Linux. Não foi testado em ambiente Windows.
Tip
Na raiz do projeto, tem um arquivo de exemplo chamado teste.sep, que pode ser utilizado para testar o compilador e o flex/bison.
Para executar o compilador, crie um arquivo com a extensão .sep e execute o comando abaixo no terminal no diretório raiz do projeto:
python main.py <nome_do_arquivo>.sepou
python3 main.py <nome_do_arquivo>.sepCaso tudo esteja correto irá gerar um arquivo .asm na pasta output. Para torná-lo executável, execute os comandos abaixo:
nasm -f elf -o output/<nome_do_arquivo>.o output/<nome_do_arquivo>.asm
gcc -m32 -no-pie -o output/<nome_do_arquivo> output/<nome_do_arquivo>.oFeito isso o executável será gerado e poderá ser executado com o comando abaixo:
./output/<nome_do_arquivo>Para executar o flex/bison, execute o comando abaixo no terminal no diretório raiz do projeto:
./flex_bison/a.out < <nome_do_arquivo>.sepCaso tudo esteja correto irá aparecer a mensagem Everything is fine! :) no terminal.
O desenvolvedor da linguagem GreenLang é apenas um estudante de engenharia da computação e torcedor do Palmeiras. O GreenLang é uma expressão criativa de admiração ao time e seus jogadores, sem ligação oficial com a Sociedade Esportiva Palmeiras como organização.
