Skip to content
This repository has been archived by the owner on Sep 6, 2023. It is now read-only.

fmipython/assignment-1-template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Задание 1 JSON parser

Условие на задачата

В директорията src/ има 3 файла с класове:

  • tokenizer.py - Tokenizer разбива string на отделни парчета
  • iterator.py - Позволява консумирането на елементи от list/Tokenizer 1 по 1
  • json_parser.py - Конструира python dict/list който отговаря на валиден JSON string подаден като Iterator Препоръчваме имплементирането им в тази последователност.

Всеки метод/клас/функция имат допълнително описание как трябва да работят.

Работа със заданието

Препоръчваме използвамето на Gitpod, за който има автоматична конфигурация на средата.

В противен случай препоръчваме работа UNIX машина (или linux subsystem for windows)

Тези 2 инструмента улесняват работата по задачата (ако не ги ползвате ще трябва да създадете ръчно virtualenv и да пускате тестовете с python -m pytest):

Използване на direnv:

В директорията на проекта трябва да включите direnv

$ direnv allow

Използване на just

В директорията на проекта може да използвате:

$ just test # run all tests
$ just coverage # generate coverage information for the code
$ just coverage-html # generate coverage information in a html page (highlighting (un)covered lines)

Предистория/Мотивация

Преобразуването на текст (string) до машинни обекти/инструкции е често срещана задача. Примери:

  • компилаторите преобразуват текст до машинни инструкции
  • текст като JSON може да бъде конвертиран до обект във всеки програмен език
  • често данни от проучвания се разпространяват като CSV. За работа с тези файлове се изисква csv-parser който конвертира файла до таблица в паметта

Всички тези задачи се решават по един и същи начин:

  1. Tokenizer - разбиване на текста на значещи символи/думи наречени токени
  2. Parser - Конвертиране на отелните токени до сложни структури (списъци, таблици, дървета, обекти). Ако искаме единствено да разглеждаме данните тази стъпка обикновено е последна.
  3. Compiler - Използване на структурираните данни от Parser-а за допълнителна обработка. Тази стъпка се използва само в случаи когато е необходимо допълнително обработване на данните. Обикновено тази стъпка е доста сложна и е винаги различна.

За това задание ще реализираме стъпка 1 и 2. От текст (сериализиран JSON) ще създадем обекти в Python (ще десериализираме JSON string). Между стъпка 1 и 2 ще използваме Iterator - клас който ще ни позволи да консумираме токените 1 по 1. Повечето програмни езици имат вградени структури/методи които представляват този Iterator, но ние ще го реализираме като отделен клас.

Това задание е мотивирано от курса nand2tetris в който се имплементира компилатор като се започва от hardware gates.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages