Генерация дерева выражения по русскому описанию - практика 2014

Issue #289 wontfix
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 289

Перенести на PHP, PHPParserGenerator и JFLex PHP - пока на уровне выполнения юнит-тестов.
Генерировать дерево из потомков preg_node и думать как обеспечить более полный их охват.

Reported by oasychev on 2014-07-07 08:25:24

Comments (20)

  1. Valeriy Streltsov
    Виртуалку скопировал на комп в 902, который сразу за дверью справа (на мониторе написано
    19). Она лежит в диске D:\moodle vm.
    Там сам образ и небольшое readme.
    

    Reported by vostreltsov on 2014-07-08 10:56:39

  2. Oleg Sychev reporter
    Как дела, чего достигли, какие вопросы? Почему совсем не вижу кода на сервере? Даже
    клон не завели...
    

    Reported by oasychev on 2014-07-10 13:29:33

  3. Oleg Sychev reporter
    В понедельник в 13-30 встреча будет в политехе. Быть всем, кто по моим задачам работает.
    Лучше взять ноутбуки потому что многим надо показать:
    а) что делать с меркуриалом и клонами
    б) вопросы по коду
    

    Reported by oasychev on 2014-07-12 16:51:47

  4. Oleg Sychev reporter
    Что-то от вас давно коммитов не видно; и вопросов тоже нет. В чем проблема?
    Документацию по JLexPHP и PHPParserGenerator найти вроде несложно; примеры использования
    можно посмотреть в question/type/preg/src и blocks/formal_langs/src
    
    Где перевод тестов?
    

    Reported by oasychev on 2014-07-16 22:12:21

  5. Former user Account Deleted
    Олег Александрович, а приемлимо ли нормально работать со строками в PHP, в JLex включена
    опция unicode, но можно ли пользоваться функциями вроде этой без опасений:
     if(strpos($this->yytext(),'более')===true)
    

    Reported by nik95penik@yandex.ru on 2014-07-24 21:18:29

  6. Valeriy Streltsov
    Нельзя так делать. Посмотри на файл src/preg_lexer.lex - там много работы с юникодом.
    Ctrl+F'ай по файлу "::str" - увидишь примеры.
    
    Вообще, в мудле есть класс core_text, но у нас есть свой наследник от него - qtype_preg_unicode.
    В лексере используется где как.
    
    Твой пример выглядел бы как if(qtype_preg_unicode::strpos($this->yytext(),'более')===true)
    
    Кстати, strpos никогда строго true не возвращает, строгое только false.
    

    Reported by vostreltsov on 2014-07-24 21:26:42

  7. Former user Account Deleted
    Благодарю. Значит на строковые функции не полагаться.
    

    Reported by nik95penik@yandex.ru on 2014-07-24 21:59:49

  8. Oleg Sychev reporter
    У них просто дубликаты есть. Можно использовать их либо как статические методы, либо
    (лучше) - создать объект qtype_preg_unicode и использовать динамические.
    Потому что объект гарантирует корректную работу [ ] при взятии символа - для того и
    создавался. С ними тоже проблемы.
    И следите, чтобы файлы с русскими буквами имели кодировку UTF-8.
    

    Reported by oasychev on 2014-07-24 22:03:21

  9. Former user Account Deleted
    Понял. Спасибо большое.
    

    Reported by nik95penik@yandex.ru on 2014-07-24 22:09:35

  10. Valeriy Streltsov
    Для правильной работы [] у нас qtype_poasquestion_string
    

    Reported by vostreltsov on 2014-07-25 04:21:19

  11. Former user Account Deleted
    Какими типами представляются условия вида (?(...)...|...) и \k<...> ?
    И что мне делать с преобразованием шаблонов из обратной польской нотации в дерево?
    Писать новые функции с кучей условий?
    В связи с 2 вопросом думаю на счет тестирования парсера, раньше оно было за счет этой
    функции преобразования.
    

    Reported by nik95penik@yandex.ru on 2014-07-28 13:23:14

  12. Oleg Sychev reporter
    Условия это conditional subpatterns - их надо искать в разделе операций, смотрите на
    сокращения от этой фразы среди потомков qtype_preg_operator
    \k это backreference - смотреть в листьях - среди потомком qtype_preg_leaf
    

    Reported by oasychev on 2014-07-28 21:19:05

  13. Former user Account Deleted
    для \k нашел, для условий чего-то не могу найти версии,чтобы было не только IF-THEN,
    а IF-THEN-ELSE.
    

    Reported by nik95penik@yandex.ru on 2014-07-28 21:25:02

  14. Oleg Sychev reporter
    Там по идее в случае else просто лишний операнд добавляется в массив. Это один класс.
    

    Reported by oasychev on 2014-07-29 13:34:41

  15. Former user Account Deleted
    Вопрос по виртуальной машине, java тут есть установленная? хоть примерно носом ткнуть,
    а то в поиске муть какая-то, ничего похожего. Если нет, то что установить надо? 
    

    Reported by nik95penik@yandex.ru on 2014-07-29 13:48:28

  16. Oleg Sychev reporter
    попробуйте вызвать java.exe - узнаете.
    Есть нет - скачать и поставить легко, вам ведь только пакет для запуска нужен...
    

    Reported by oasychev on 2014-07-29 13:56:11

  17. Oleg Sychev reporter
    Ну то есть без exe конечно - просто в терминале (командной строке) выполните 
    java -version
    
    Если напишет версию, значит есть. И той же командой java можно запускать. Если нет
    - надо поставить...
    

    Reported by oasychev on 2014-07-29 14:05:22

  18. Valeriy Streltsov
    Нет, я не ставил джаву. В консоли из-под рута написать pacman -S jre7-openjdk
    

    Reported by vostreltsov on 2014-07-29 20:10:17

  19. Oleg Sychev reporter
    Брошено автором.
    

    Reported by oasychev on 2015-03-22 22:13:02 - Status changed: WontFix

  20. Log in to comment