Giter Club home page Giter Club logo

lispy-parser's Introduction

Analisador sintático de Lispy

Complete o código do arquivo parser.py para passar em todos os testes em test_parser.py. As expressões regulares do analisador sintático Lark já estão implementadas e não precisam ser alteradas. Assim como no trabalho anterior, você deve instalar o pyest no computador para rodar a suite de testes (apt install pytest). A partir daí, basta digitar pytest para executar os testes.

Existem algumas opções do pytest que facilitam a execução de conjuntos específicos de testes, como mostram os exemplos abaixo:

  • pytest --maxfail=1 - para a execução após a primeira falha
  • pytest --lf - repete apenas os testes que falharam da última vez
  • pytest -k quote - seleciona apenas os testes que possuem "quote" no nome. Você pode trocar "quote" por qualquer outra palavra.

A proficiência é demonstrada a partir do resultado dos testes:

  • 6 ou mais acertos: [cfg-bnf]
  • 8 ou mais acertos: anteriores + [cfg-ebnf]
  • 10 ou mais acertos: anteriores + [cfg-reduce]

ATENÇÃO A suite de testes utilizada para correção pode conter exemplos adicionais para evitar implementações que mirem especificamente nos testes.

Entrega

O trabalho deverá ser entregue até dia 03/02 utilizando formulário disponibilizado pelo professor. Atrasos de até 1 emana serão penalizados em 2 acertos e atrasos maiores implicarão no não-recebimento do trabalho. O aluno nesta situação terá que propor outra atividade para comprovar proficiência.

Regras sintáticas

Scheme/Lispy possui pouquíssimas regras gramaticais. Cada código em Lispy é formado por uma sequência de valores, onde cada valor pode ser um elemento atômico como número, string, símbolo/variável, caractere ou booleano ou ainda por uma S-Expression, que consiste basicamente numa lista como (+ 1 2) onde o primeiro elemento é interpretado como uma função e os seguintes como seus operadores.

Listas de Lispy podem conter quaisquer elementos em quaisquer posições, inclusive outras listas. Além destes elementos básicos, também temos a regra de "quoting", que evita a avaliação de um pedaço de código, preservando seu valor como elemento da árvore sintática. O quoting é feito com o operador de aspas simples (') e pode ser aplicado antes de qualquer elemento como em '(1 2 3) ou 'quoted-symbol ou ainda '42.

Implemente as regras desta gramática completando a string de declaração da gramática no arquivo parser.py.

Árvores sintáticas

As árvores sintáticas resultantes devem ser convertidas em estruturas de dados Python correspondentes. Isto pode ser feito implementando os métodos da classe LispyTransformer, associando-os a cada símbolo relevante da gramática.

As árvores sintáticas de Lispy devem ser traduzidas em listas ou tuplas do Python. Desta forma, um código Scheme como (1 2 3) deve ser traduzido para a lista Python [1, 2, 3]

Além disto, os elementos atômicos devem ser convertidos para os seus valores correspondentes em Python. Por simplicidade, é possível converter todos números pra float e interpretar strings apenas pela remoção das aspas de início e fim. Além disto, os elementos do tipo caractere devem ser convertidos para strings de tamanho 1, onde as formas especiais como #\space dadas pelo dicionário LispyTransformer.CHARS devem ser respeitadas. Lembrem-se que os elementos especiais de um único carater são sensíveis à capitalização, enquanto que os que possuem mais de um carater não. Assim, #\A difere de #\a, mas #\Space é distinto de #\space.

lispy-parser's People

Contributors

fabiommendes avatar joaovitorfarias avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.