Linguagem baseada em RPGs de turno e feita com Python.
Introdução • Funcionalidades • Como usar • Exemplo • Produções e Ações Semânticas • Apresentação • Créditos • License
O RPG Pettine é uma linguagem feita para um trabalho acadêmico cujo objetivo é simular uma batalha de RPG em turno.
- Shell - Shell interativo
- Faça programas curtos, checagens rápidas ou aprendizado dinâmico.
- Parse de Arquivos
- Para programas longos e complexo
- Simulação de batalha RPG
- Carrega jogadores com propriedades aleatórias
- Simula batalha através de fórmulas aleatórias
Link para o Vídeo da Apresentação --> https://www.youtube.com/watch?v=RcL7FJspytk.
Para clonar e rodar essa aplicação, você irá precisar Git, Python. Pelo seu terminal:
# Clone o repositório
git clone https://github.com/Gustavo-Pettine/rpg-pettine
# Entre no repositório
cd rpg-pettine
# Rode a aplicação
py main.py
player_1 = LOAD
player_2 = LOAD
BATTLE player_1 player_2
Rodando o exemplo no terminal:
py main.py .\example\battle.rpg
Grammar Action
------------------------ ---------------------------------
statement : PRINT expr lf.print(expr.val)
| ID = expr ID.val = expr.val
| expr
expr0 : ID expr0.val = self.ids[ID.val]
| ID = expr1 ID.val = expr1.val
| LOAD expr0.val = lf.load()
| LOAD STRING expr0.val = lf.load(STRING.val)
| BATTLE expr1 expr2 lf.battle(expr1.val, expr2.val)
select : SELECT STRING FROM expr lf.select_from(STRING.val, expr.val)
A linguagem escolhida foi o python por ser dinâmicamente tipada (simples), multi-plataforma e não há necessidade de compilar para executar o projeto.
No código dessa linguagem, todos os comandos básicos do exemplo da documentação do pacote escolhido (no caso uma calculadora) foram retirados. Como tokens temos as palavras reservadas PRINT
que serve para printar um jogador na tela, LOAD
que serve para carregar um novo jogador aleatório na memória e BATTLE
que serve para iniciar uma batalha entre dois jogadores. Fora esses comandos também tem o ID
que guarda o identificador da variável e a STRING
que serve para auxiliar nos comandos.
Fora isso, o template do código foi retirado de um repositório aberto de um aluno de compiladores fornecido pela professora em aula, onde foram realizadas diversas modificações nos arquivos, em especial nos arquivos base da linguagem (lexer.py
e parser.py
) foram alterados completamente.
As definições léxicas e gramaticais podem ser conferidas na Seção Produções e Ações Semânticas. As definições de expressões regulares utilizadas para gerar os tokens podem ser encontradas no trecho de código abaixo:
tokens = { ID, ASSIGN, STRING, PRINT, LOAD, BATTLE, SELECT, FROM }
PRINT = r"PRINT"
LOAD = r"LOAD"
BATTLE = r"BATTLE"
SELECT = r"SELECT"
FROM = r"FROM"
ASSIGN = r'='
ID = r"[a-zA-Z_]\w*"
@_(r'".*"')
def STRING(self, t):
t.value = t.value.strip('\"')
return t
Árvore de derivação da execução de BATTLE player_1 player_2
:
- Inicialmente, escolha da linguagem e pacote.
- Criatividade para sair do exemplo da documentação (calculadora).
Essa aplicação utiliza os seguintes projetos de código aberto:
MIT