Оставшиеся проблемы с апострофами

Issue #159 closed
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 159

What steps will reproduce the problem?
1.
2.
3.

What is the expected output? What do you see instead?


Please use labels and text to provide additional information.

Reported by oasychev on 2012-10-31 08:13:15

Comments (21)

  1. Oleg Sychev reporter
     Наличие юникодовского апострофа вызывает кучу ошибок и сбоев в форме редактирования
    вопроса, попробуйте следующую лексему
    madman’s
    

    Reported by oasychev on 2012-10-31 08:14:56 - Labels added: Component-WritingCompetently

  2. Oleg Sychev reporter
    Еще 'em определяется как две лексемы, а это сокращенное them.
    

    Reported by oasychev on 2012-10-31 09:53:50

  3. Former user Account Deleted
    'em исправил, а вот с U+2019 жуткая проблема. Дело в том, что ошибка находится в коде,
    сгенеренном JLexPHP. Такое ощущение, что он не видит состояния для перехода. Я пробовал
    тупо забить его в код сканера - код самого JLexPHP валится на генерации сканера. Я
    думаю, в это issue стоит добавить Стрельцова, возможно он что-то такое делал и как-то
    решил такую проблему.
    

    Reported by mamontov.dp on 2012-11-01 16:34:33

  4. Valeriy Streltsov
    Я тупо заменил стандартные строковые функции на свои. В poasquestion сейчас нормальный
    jlex.php - можешь его использовать. Входной файл для jlex'а в юникоде сохранен? :)
    

    Reported by vostreltsov on 2012-11-01 19:47:50

  5. Former user Account Deleted
    Ты там что-то в предыдущей подобной issue писал о %unicode и %full. Это может исправить
    ситуацию, или такой же тупик?
    

    Reported by mamontov.dp on 2012-11-02 11:27:46

  6. Valeriy Streltsov
    Я указывал %unicode в файле лекса. Объясни подробнее, какой базовый файл jlex.php ты
    используешь - из poasquestion или нет? Эта директива влияет только на генерируемый
    файл (там больше каких-то констант становится). А если базовый класс в том файле двигается
    по буферу используя обычные строковые функции - толку не будет.
    

    Reported by vostreltsov on 2012-11-02 13:28:37

  7. Former user Account Deleted
    Да, из  poasquestion. Тогда сейчас попробую применить его.
    

    Reported by mamontov.dp on 2012-11-02 14:27:55

  8. Former user Account Deleted
    Не сработало. Если указать в файле юникодовый апостроф в регулярном выражении тогда
    JLexPHP упадет в момент генерации ДКА. Пока буду думать над тем, как исправить его.
    

    Reported by mamontov.dp on 2012-11-02 14:52:00

  9. Oleg Sychev reporter
    Потестил pregовский сканер - он не валится на регулярном выражении, содержащем этот
    юникодовый апостроф. Так что проблема с jlex'ом должна быть решаемой. poasquestion
    то у вас в последнем состоянии на домашнем тестовом сайте?
    

    Reported by oasychev on 2012-11-04 11:41:42

  10. Former user Account Deleted
    Вы не правильно поняли проблему. Дело не в том, что апостроф вылетает (это было исправлено
    путем добавления директивы %unicode). Дело в том, что если апостроф  данным символом
    использовать в регулярном выражении исходного файла, передаваемого в JlexPHP, cам JLexPHP
    вылетает с ArrayIndexOfBoundException 1074. Я пробовал преобразовывать кодировку исходного
    файла языка в UTF-16, но это он тоже на распознает.
    

    Reported by mamontov.dp on 2012-11-04 11:44:54

  11. Oleg Sychev reporter
    Мануал говорит что Jlex умеет понимать юникод-символы в синтаксисе
    \udddd  The Unicode character code corresponding to the number formed by four hexidecimal
    digits dddd
    
    Вы так его добавляли?
    

    Reported by oasychev on 2012-11-04 12:15:25

  12. Former user Account Deleted
    Увы, и просто символ, и задание его в виде \u2019 валятся с той же ошибкой.
    

    Reported by mamontov.dp on 2012-11-04 12:20:28

  13. Oleg Sychev reporter
    Ну если оно перестало вылетать - это уже весьма хорошо, ибо вылеты в принципе недопустимы.
    
    Что касается его поддержки как апострофа. Может тупо перед сканнингом сделать предобработку
    строки, заменив этот символ на ASCII апостроф? Тогда JLex этим мучить не придется...
    

    Reported by oasychev on 2012-11-04 19:00:14

  14. Oleg Sychev reporter
    Кстати, кому-нибудь не мешало бы сравнить с последними версиями JLex PHP и Lemon PHP
    - например в последнем есть про фиксы некоторых багов коммиты не очень давно...
    https://github.com/wez/lemon-php
    https://github.com/wez/JLexPHP
    
    Можно там же попробовать написать автору о проблемах, хотя активности нет давно. И
    еще можно скачать оригинальную версию JLex и попробовать ей скормить тот же символ
    - если и она поимеет проблемы (а вполне может, т.к. они не на стадии генерации кода
    происходят), то можно уже писать багрепорт его поддержке, а там вроде как серьезный
    ВУЗ за этим стоит, могут отреагировать...
    

    Reported by oasychev on 2012-11-04 19:07:06

  15. Former user Account Deleted
    Я буквально позавчера скачивал оттуда последнюю версию JLexPHP, она ничем не отличается
    от моей и в ней присутствует этот баг. Но предобработку сделаю сегодня.
    

    Reported by mamontov.dp on 2012-11-05 05:39:38

  16. Former user Account Deleted
    Нашел как исправить ситуацию чисто случайно. Оказалось, что я взял директиву %full из
    preg, которая в случае присутствия %unicode попросту не нужна. Если удалить эту директиву
    - все работает и проходит тесты.
    

    Reported by mamontov.dp on 2012-11-05 07:24:58

  17. Oleg Sychev reporter
    А чего кавычки в тесте вокруг madman’s двойные?
    

    Reported by oasychev on 2012-11-05 09:52:39

  18. Former user Account Deleted
    Извиняюсь, остались от предыдущего коммита. Сейчас исправлю.
    

    Reported by mamontov.dp on 2012-11-05 09:54:49

  19. Oleg Sychev reporter
    fixed не забываете выставлять...
    

    Reported by oasychev on 2012-11-09 12:08:38

  20. Former user Account Deleted
    Исправлено.
    

    Reported by mamontov.dp on 2012-11-26 12:38:21 - Status changed: Fixed

  21. Log in to comment