Корректная обработка ошибок, обнаруженных лексером

Issue #156 duplicate
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 156

Мне сейчас совершенно не нравится код lexical_analyzer.php строки 68-92.
Мало того, что там выжили двойные кавычки, так в анализаторе оказался код, специфичный
для языка. Это никуда не годится: весь специфичный для языка код должен находится в
блоке, в классе языка.

Для обработки таких ситуаций в token_base.php есть класс block_formal_langs_lexical_error.
А в потоке токенов - поле $errors. 

lexical_analyzer.php должен только проверить что поле $errors не пустое, и если ошибки
есть то конвертировать их в mistakes независимым от языка образом. 

Если что непонятно или требуется добавить поле в класс лексической ошибки - спрашивайте
здесь, обсудим.

Reported by oasychev on 2012-10-13 19:16:11

Comments (6)

  1. Oleg Sychev reporter
    Также при создании ошибки она должна, если возможно, корректироваться для дальнейшей
    обработки - не зря далее передается correctedstream.
    

    Reported by oasychev on 2012-10-13 19:18:14

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

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

  3. Oleg Sychev reporter
    Тестировал. Выяснились следующие проблемы уже в интерфейсе вопроса:
    1. Ошибка в ответе преподавателя
    1.1) должна показываться сразу при попытке сохранения, а не только после ввода описаний
    1.2) в сообщение об ошибке добавить саму анализируемую строку и выделить жирностью
    ошибочный участок - как это делает preg (посмотрите, только не на стандартном матчере)
    
    Для строки 'abc' "adf
    ошибки
    There is multicharacter literal at 0:{$a->col}
    Cannot match input {$a->symbol} near 0:6 
    Проверить заполнение $a, да и вторая ошибка вполне могла бы быть конкретнее...
    
    2. в ответе студента
    There is multicharacter literal at 0:{$a->col}
    A lexeme "{$a->value}" at 0:0 is odd in response
    Проверить строки!!!
    

    Reported by oasychev on 2012-10-31 08:11:58 - Status changed: InProgress

  4. Oleg Sychev reporter
    Вы посмотрели эти проблемы?
    

    Reported by oasychev on 2013-01-11 21:12:02

  5. Oleg Sychev reporter
    Я бы все-таки не использовал общий класс lexical mistake, а выделил специальный вид
    ошибки - типа scanning error. Если Бирюкова свой код сделает, лексических ошибок еще
    много разных будет...
    

    Reported by oasychev on 2013-01-18 20:07:03

  6. Log in to comment