Preg при подсказке следующей лексемы языка Си показывает имя и следующий символ
Issue #186
closed
Originally reported on Google Code with ID 186
res=
или
strcat(
Ищем источник проблемы, он может быть в лексере или коде подсказки, поэтому главный
- я, но помощь в трассировке проблемы до источника приветствуется.
Reported by oasychev
on 2013-03-24 21:32:48
Comments (6)
-
Account Deleted -
reporter Проблема, похоже, в блоке - но она очень странная. Если мы посмотрим на return_pos() в лексере, в английском языке для однострочной лексемы, то строка выглядит так $end_col = $begin_col + strlen($this->yytext()) - 1; а для языка Си $end_col = $begin_col + strlen($this->yytext()); Очевидно, проблема возникает из этой разницы - тестировал я эту подсказку на английском при разработке. Но вот что странно - почему в CorrectWriting при этом оба языка нормально работают?! Поэтому пока не понятен точный источник проблемы и влияние на другой вопрос, я код трогать не стал. Дмитрий, проблема похоже у вас - разберитесь пожалуйста, в чем там дело и почему на мой код это влияет, а на ваш - нет. Я бы также подумал о написании родительского класса для встроенных лексеров с описанием общего кода, чтобы не было вот таких вот штучек.
Reported by
oasychev
on 2013-04-04 11:10:07 -
Account Deleted Давайте определимся тогда с вещью, которая не была точно определена при разработке. А именно - где находится end_pos() для лексемы. Чтобы она отображалась правильно для ошибки в форме, у вас по коду надо было чтобы она указывала на символ следующий за последним символом в лексеме. Теперь есть два варианта - оставить также и исправлять логику в Preg или сделать, чтобы она указывала на последний символ лексемы и переделывать форму. P.S. Я не уверен что баг действительно в этом. Все таки все отлично разбирается CorrectWriting - юнит-тесты это показывают. Возможно preg игнорирует это.
Reported by
mamontov.dp
on 2013-04-04 17:19:53 -
reporter Так вот я и не понимаю, как так разбирается CorrectWriting, когда смысл end_pos() в разных языках - разный... Такого быть не должно в любом случае! И поэтому предлагаю вынести соответствующий код в общий базовый класс для встроенных лексеров, чтобы правки его не надо было копировать из языка в язык. Я думаю, что colend должен указывать на последний символ в лексеме - следующего может и не быть вообще. И закомментировать надо уже класс позиции тщательно, чтобы разночтений в этом смысле не было. Если код в форме CorrectWriting это нарушает - можете его поправить.
Reported by
oasychev
on 2013-04-06 06:33:30 -
reporter Проблема была вызвана разницей в простановке завершающей позиции в разных языках. Проблема решена, но вот комментариев в классе позиции не появилось, чтобы больше таких проблем не было. И возможно return_pos() следует все же вынести в базовый класс хардкодового лексера?
Reported by
oasychev
on 2013-04-13 17:02:17 - Status changed:Fixed
-
reporter Reported by
oasychev
on 2013-05-05 15:45:02 - Status changed:Done
- Log in to comment
Reported by
mamontov.dp
on 2013-03-25 12:25:35