PHP не работает без ошибок - PullRequest
       7

PHP не работает без ошибок

0 голосов
/ 20 февраля 2010

Я создаю синтаксический анализатор шаблонов.

Анализатор шаблонов работает так:

  • Tokenize (сделать для каждой части кода шаблона токен)
  • Анализировать
    • Используйте мой класс ParserHelper. Вы можете добавить правила для этой системы, а затем она проверит список токенов на правильность грамматики.
    • Добавить / изменить некоторые токены для дополнительной функциональности
  • Компиляция (перевод в php (для быстрого преобразования в html))

Помощник синтаксического анализатора - это класс с такой структурой:

  • защищенная функция parseRecursive (& $ offset, $ ruleName)
  • защищенная функция tryOption (& $ offset, vdParserHelperRuleOption & $ option)
  • защищенная функция tryItem (& $ offset, vdParserHelperRuleOptionItem & $ item, $ count)

Смещение означает смещение токена (таким образом, смещение = 0 означает первый токен для анализа и т. Д.)

Мои правила помощника синтаксического анализатора имеют такую ​​структуру:

  • Правило
    • Опции
      • Пункты

Для людей, как узнать, что такое не зависящий от контекста грамматик:

rule -> | | ... | * ​​1047 *

с параметром X - это labda (пустая опция) или список:

  • 'ссылка на правило' (ссылка на другое правило (может быть рекурсия)) или
  • токен

Таким образом, функция parseRecursive вызывает tryOption, tryOption вызывает tryItem и tryItem могут вызывать parseRecursive agian.

Ошибка в функции tryItem:

...
// Try item
if($item->getType()==vdParserHelperRuleOptionItem::RuleLink){
    ///// The next line !!!!!!!!!!!!!
    if(!$this->parseRecursive($currentOffset, $item->getData())){
    ///// The previous line !!!!!!!!!

        return $item->isOptional();
    }
}else if($item->getType()==vdParserHelperRuleOptionItem::Type){
    ...
}
...

Когда я удаляю (заменяю на if (true) {или около того) строку между комментариями 'the', выполняется код php. Но когда я не удаляю эту строку, php не выполняет мой код и ничего не выводит, и я не получаю никакой ошибки вообще. Когда я смотрю в файл журнала apache, я получаю эту ошибку:

[notice] child pid 11957 exit signal Segmentation fault (11)

Это ошибка в php, или php не может обрабатывать прямую рекурсию? Или это что-то еще?

1 Ответ

0 голосов
/ 20 февраля 2010

Я уверен, что это упущение при очистке кода для публикации, но у вас есть дополнительный {это не закрыто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...