Замечания по блоку формальных языков

Issue #196 closed
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 196

Получилось так, что мы примерно одной проблемой занялись одновременно. Посмотрел ваши
коммиты, мои мне нравятся больше - сравните...
0. Теперь это надо аккуратно слить, оставив мой вариант - сможете?

Еще замеченные проблемы:
1. Рефакторинг: стоит заменить в анализаторах и ошибках массивы лексем на объекты processed_string
(чем каждый раз их создавать, когда надо). Для правильного ответа генерируем из БД,
для проверяемого - из строки.
2. processed_string::node_descriptions_list должна бы проверять заполнение полей $this->tableid
и $this->tablename: мало ли как строка была создана; кроме того отступы в ней нарушают
правила форматирования
3. Свободные функции block_formal_langs_octal_to_decimal_char и шестнадцатиричный аналог
дублированы в коде языков С и С++ - вынести в общий подключаемый файл...  Это еще и
фаталками чревато при подключении обоих языков.
4. Реализовать lexem_name() для userdefined языков - видимо понадобится добавить поле
в БД.

Reported by oasychev on 2013-05-16 09:48:03

Comments (16)

  1. Oleg Sychev reporter
    Давайте сейчас акцент на этом и написании хотя бы хардкоденного парсера для С/С++ (с
    описаниями узлов грамматике по схеме).
    Когда у нас появится дерево, мы сразу сможем лучше разговаривать об основных алгоритмах....
    

    Reported by oasychev on 2013-05-16 15:22:55

  2. Oleg Sychev reporter
    Обратите внимание на последний коммит в блоке формальных языков. Там введен класс очень
    удобный для рефакторинга и дальнейшей работы (Мария - как видите, в него должна перейти
    функция построения корректированной строки).
    
    Дмитрий - советую посмотреть и использовать его объекты при реализации пункта 1. Я
    не вижу другого способа разместить код, определяющий как показать пользователю лексему,
    т.к. в зависимости от обстоятельств он может браться из разных строк. Объясню на консультации
    подробней...
    

    Reported by oasychev on 2013-05-19 19:04:26

  3. Oleg Sychev reporter
    Дмитрий - с рефакторингом прошу не тянуть, т.к. он нужен Бирюковой для интеграции кода.
    

    Reported by oasychev on 2013-05-21 15:43:45

  4. Former user Account Deleted
    А зачем в последнем коммите test_is_same убран и заменен всего на один  ассерт? Там
    бы побольше тестов надо, мне кажется.
    

    Reported by mamontov.dp on 2013-05-21 19:07:11

  5. Former user Account Deleted
    Попробовал исправить 1. Все работает, но насколько корректно исправил - прошу оценить.
    

    Reported by mamontov.dp on 2013-05-22 06:25:07

  6. Oleg Sychev reporter
    Там test_is_same переименован был, а не убран - чтобы на каждую мелкую функцию класса
    отдельный файл не заводить...
    

    Reported by oasychev on 2013-05-22 15:25:18

  7. Oleg Sychev reporter
    1. В первом приближении вроде верно, только надо будет на примерах разобрать, куда должен
    вести $responseindex - в corrected или в compared (которая есть настоящая response)
    - на примерах ситуаций с лишними и пропущенными разделителями. Или возможно его для
    sequence_mistakes надо переименовать в correctedindex, т.к. seqence_analyzer работает
    только с исправленной строкой.
    
    2-4 вроде мелочи, можно быстро сделать.
    

    Reported by oasychev on 2013-05-23 09:16:53

  8. Oleg Sychev reporter
    У меня после рефакторинга не запускается вопрос для preview - вылетает фаталка, вызванная
    обращением к node_description нулевой по номеру лексемы на пустой строке, созданной
    не из базы.
    
    Notice: Undefined offset: 0 in Z:\home\moodle\www\blocks\formal_langs\tokens_base.php
    on line 963
    Fatal error: Call to a member function value() on a non-object in Z:\home\moodle\www\blocks\formal_langs\tokens_base.php
    on line 963
    
    
    Обратите внимание на созданный класс опций, я не хочу часто редактировать все заголовки
    если еще понадобятся настройки. Возможно его стоит ввести и в is_same.
    

    Reported by oasychev on 2013-05-24 08:53:41

  9. Former user Account Deleted
    Не полностью исправленную версию закомиттил, извините. Сейчас вытолкнул исправление
    для блока формальных языков.
    

    Reported by mamontov.dp on 2013-05-25 07:02:10

  10. Oleg Sychev reporter
    А чего не сливаем мои изменения? Последний коммит может и к вам отношение иметь...
    

    Reported by oasychev on 2013-05-26 16:47:48

  11. Former user Account Deleted
    Попробовал исправить, должно работать.
    

    Reported by mamontov.dp on 2013-07-19 05:25:24 - Status changed: Fixed

  12. Oleg Sychev reporter
    Давайте подумаем: если запрашивают has_description а таблицы в БД нет - надо выкидывать
    исключение или возвращать false? Ведь описания нет... В некоторых случаях это может
    быть полезно.
    Поэтому пока не закрываю...
    

    Reported by oasychev on 2013-07-19 14:42:45

  13. Former user Account Deleted
    Я думаю, что если поля неверны, это в любом случае ошибка. Есть ли какие случаи, когда
    это полезно?
    

    Reported by mamontov.dp on 2013-07-19 16:05:53

  14. Oleg Sychev reporter
    Ну вот если строка не из БД и в принципе не имеет описаний, должна ли функция has_description
    возвращать ложь (описания нет) или выкидывать ошибку?
    

    Reported by oasychev on 2013-07-22 11:45:20

  15. Former user Account Deleted
    Я думаю, что бросать исключение, т.к. получение описания уже так делает и это во многом
    родственные функции. Если возникнут такие ситуации, переделаем.
    

    Reported by mamontov.dp on 2013-07-22 12:07:24

  16. Oleg Sychev reporter
    Это было сделано раньше, когда описание само еще не подставляло текст. Будем думать
    - последующие задачи покажут, как лучше.
    

    Reported by oasychev on 2013-07-22 13:28:32 - Status changed: Done

  17. Log in to comment