Абстрактный класс языка и два начальных сканера

Issue #43 closed
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 43

Написать подробный проект модуля: диаграмму потоков данных с точным описанием всех данных
с их типами, постановку задачи и метод решения для каждого этапа.

Reported by oasychev on 2011-10-28 12:15:26

Comments (12)

  1. Oleg Sychev reporter

    Reported by `oasychev` on 2011-11-28 21:11:35 - Labels added: Component-WritingCompetently - Labels removed: Component-Autofeedback

  2. Oleg Sychev reporter

    ``` Поскольку общее проектирование модуля я оставляю за собой, за вами - проект класса языка (позволяющего наследовать встроенные языки и класс для пользовательских языков).

    Этим классом практически будете пользоваться главным образом вы. Напоминаю также что жду проекта как интерфейс работы с языками будет выглядеть для пользователя... ```

    Reported by `oasychev` on 2011-12-04 22:43:12

  3. Oleg Sychev reporter

    ``` Вашей первостепенной задачей является создание абстрактного класса языка и двух начальных сканеров: упрощенной версии C++ (без препроцессора, typedef, указателей на функции и прочих сложных элементов) и английского языка. Можно пока в хардкоде. По вводимым пользователем языкам подготовьте проект класса.

    Это необходимо сделать очень быстро - в течении этих двух недель, т.к. их отсутствие практически блокирует работу всем остальным. Сканеры должны быть с юнит-тестами.

    Если останется время - готовьте проект функций синтаксического анализатора. ```

    Reported by `oasychev` on 2011-12-07 23:15:02 - Labels added: Priority-Critical - Labels removed: Priority-Medium

  4. Oleg Sychev reporter

    ``` 1) Вы заметили изменение терминологии в последних моих правках? В блоке теперь нет никакого answer, т.к. блок может вообще не с вопросом работать, а неизвестно с чем еще... Там теперь есть correct и compared, пожалуйста соблюдайте.... 2) Почему тесты не в каталоге simpletest? Что, так сложно сделать оболочку для запуска их через Moodle, при этом оставив возможность запускать отдельно?! Поместите все файлы тестов в simpletest (только следите за наименованиями файлов, не все запускаются при мудловском тестировании) и сделать отдельный файл мудловского теста, который их вызовет и сделает проверки... ```

    Reported by `oasychev` on 2012-04-16 14:00:36

  5. Oleg Sychev reporter

    ``` И вообще, потрудитесь снабдить тесты автоматической проверкой, зачем вручную то печатать?! ```

    Reported by `oasychev` on 2012-04-16 14:03:40

  6. Oleg Sychev reporter

    ``` Дмитрий, перевожу эту задачу на вас т.к. вы занимаетесь сканерами сейчас. Т.к. обсуждение затягивается, лучше вести его здесь. Копирую два последних письма:

    26. Английский: дефис (знак минуса) среди слова, а также как тире (один или два дефиса) между ними... И все это: дефис и тире, апостроф и т.д. - в юнит-тесты лексера 27. Может быть воспользоваться функцией типа preg_match('/\s/',...) для определения пробельности символа и необходимости генерации токена other? А то от более хитрых пробелов будут генерироваться лексемы... 28. не воспринимается как одно слово I'm - тщательнее подойти к варинтам апострофа как часть слова; ИМХО вообще если окружена с двух сторон буквами - значит точно часть слова. Если только справа буквы - тогда ограниченное количество вариантов, потому что это может быть и кавычка, открывающая цитату или прямую речь. Я вам скопировал несколько примеров из английской литературы со апострофами Of course, if 'tisn't far, I sha'n't mind, though, 'cause I'll be glad to get there all the sooner, you know. What a pretty street! I knew 'twas going to be pretty; they're 'em 29. Проблемы с точками при сокращениях могут быть. Вот тут надо думать. Желательно видеть их как часть лексемы, вот только как это понять. Как минимум можно взять часть типовых сокращений. И однобуквенные инициалы возможно....

    26,28,29. Необходимо полное описание всех возможных описаний, а по сути, мне кажется,

    что мы уже неправильно парсим: с точки зрения логики I'm - это уже два слова: местоимение и суффикс. Мне его взять увы негде, кроме того, как я заметил, у вас больше описаний на эту тему. Я бы хотел попросить вас сделать более полный список. Кроме того, у меня вопрос: мы парсим более-менее литературный английский? Просто большинство ваших сокращений имею фонетический характер и употребляются в просторечиях. Насчет эквивалентности с двумя словами - это уже будет проблема Бирюковой или кого-то, продолжающего ее работу. Сделать в lexical analyzer через спец. классы лексем понимание что I am и I'm это одно и тоже - и т.д. Но у нас сейчас это парсится как 3 лексемы - слово, апостроф и слово - а это совсем плохо...

    Поэтому как я говорил уже - я бы начал с того, что дефис (минус) и апостроф, с обеих сторон окруженные буквами, считал частью слова.

    Систематически сделаем позже, когда завлечем англичан с нами сотрудничать, но нам нужна минимально вразумительная работоспособность кода чтобы показать. Включая понимание дефисов (бывает и по нескольку штук в словах) и апострофов внутри слова.

    Язык как раз литературный - я вам кидал цитаты из довольно популярных английских литературных произведений :) Можно будет сделать настройку о позволительности таких сокращений позже, для учителя - но опять же для этого надо сначала понимать это как одну лексему чтобы отличать от апострофов, выделяющих прямую речь...

    27. Не понял о чем вы? Что за более хитрые пробелы, можно пару примеров на которых

    валится? Да много есть вариантов пробелов в юникоде. Например неразрывный пробел. И т.д. ```

    Reported by `oasychev` on 2012-07-30 08:07:12

  7. Former user Account Deleted

    ``` 26 - исправлено, 27 - исправлено, 28 - исправлено, 29 - есть, исправлено. ```

    Reported by `mamontov.dp` on 2012-09-25 17:15:29

  8. Oleg Sychev reporter

    ``` Надо привести репозиторий в порядок как мы обсуждали, чтобы можно было вытянуть изменения... ```

    Reported by `oasychev` on 2012-09-30 19:17:37

  9. Oleg Sychev reporter

    ``` Меня несколько напрягают утилсы, во-первых их можно свести в единый класс для языков (даже родительский, без статических функций).

    Но вообще-то в проверках юнит-тестов предпочтительнее копипаст - тогда в сообщении сразу видно по строке вылетевшего ассерта что именно не так. Исключение - дэйта драйвен тестирование, но у вас маловато тестов для этого на сканеры и несложные они. ```

    Reported by `oasychev` on 2012-10-05 13:31:28

  10. Former user Account Deleted
    Сделано.
    

    Reported by mamontov.dp on 2012-10-26 09:24:03 - Status changed: Fixed

  11. Log in to comment