Skip to content
Rúben Garrido edited this page Apr 24, 2024 · 5 revisions

Objetivo

O objetivo geral deste trabalho é o desenvolvimento de uma linguagem de programação compilada – i.e., que crie programas numa linguagem de programação genérica (Java, C++, Python, ...) – que permita o desenho de imagens, usando como abstração o desenho livre com canetas/marcadores. A ideia segue a abstração inerente à biblioteca turtle do Python.

Assim, temos uma ou mais canetas que podem estar levantadas ou pousadas sobre o 'papel', cada uma com uma orientação (i.e. estão 'viradas' num determinado sentido) e que podem ser movimentadas (se pousadas, irão desenhar) para a frente, ou trás, e ao quais se pode mudar as suas propriedades (orientação, cor, espessura, padrão, etc.). A espessura do traço da caneta é determinado por uma propriedade e pela 'pressão' exercida sobre o papel (pressão zero, traço de 1 pixel, pressão de 1 traço com o valor da propriedade).

O que é um compilador

  • Tradutor de linguagem
  • No nosso caso, recebe os ficheiros de exemplo e traduz para py ou java ou cpp

Flow

Pdraw -> Java + ST -> Python

Visitors

  • Análise semântica
  • Geração de código: baseado em StringTemplate

Main

Cria o ficheiro .py.

  • Alterar para que receba um ST que representa o programa na totalidade
  • Alterar para ler de um ficheiro em vez do System.in
  • Chama o parser e caso exista erros diz quais são e acaba a execução
  • Faz o mesmo para o lexer
  • Gera código após essas validações

Estrutura

  • Parser
  • Lexer
  • Compiler

Tipos de dados

  • Devem ser decididos os diversos tipos de dados inerentes à linguagem
  • Por exemplo, pen deve ser um tipo primitivo
  • Deve existir mecanismos de comparação de tipos

Linguagem secundária

  • Extensão de ficheiro .ipdraw
  • É necessária uma gramática e um visitor adequados
  • O import é feito no interpretador, não no compilador!
  • O parsing é feito em runtime, ou seja, o visitor, o lexer e o parser são na linguagem destino (neste caso, Python)

StringTemplate

Esta merda é valorizada!! Toca a usar, bitches.

Clone this wiki locally