ФорумПрограммированиеPHP для идиотов → Синтаксический разбор. Конечный автомат. (SQL :param -> ?)

Синтаксический разбор. Конечный автомат. (SQL :param -> ?)

  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 18 сентября 2009 г. 6:16, спустя 134 дня 4 часа 11 минут

    .
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 7 мая 2009 г. 0:36, спустя 18 часов 19 минут 57 секунд

    А просто предварительно вырезать камменты нельзя?
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 7 мая 2009 г. 1:59, спустя 1 час 23 минуты 15 секунд

    Конечные автоматы вещь запарная, а реализовывать их посимвольным перебором на интерпретируемом языке вообще моветон.

    Я бы сделал какое-нибудь подобие токинезатора: вытащить текст до каммента, вытащить каммент, вытащить текст до следующего каммента…


    $query = 'text :change /*qm- comment :param_in_comment */ :no_change
    two string –qm+ comment
    :change_change the end.';

    while (strlen($query) > 0) {
    /* Вытаскиваем текст до каммента + начало каммента */
    if (!preg_match('~(.*?)((\/\*)|(–))~isA', $query, $matches)) {
    /* Камментов больше нет */
    echo 'Текст вне каммента: '.$query.'<br />';
    break;
    }
    echo 'Текст вне каммента: '.htmlspecialchars($matches[1]).'<br />';
    if (!isset($matches[2])) {
    /* Текст закончился */
    break;
    }
    $query = substr($query, strlen($matches[0]));
    if ($matches[2] == '/*') {
    /* Текст внутри каммента */
    $e = explode('*/', $query, 2);
    if (!isset($e[1])) {
    echo 'Незакрытый каммент';
    break;
    }
    $query = $e[1];
    echo 'Текст внутри каммента: '.htmlspecialchars($e[0]).'<br />';
    } else {
    /* Одностроковый каммент */
    $e = explode("\n", $query, 2);
    echo 'Текст внутри каммента: '.htmlspecialchars($e[0]).'<br />';
    $query = isset($e[1]) ? $e[1] : '';
    }
    }
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 7 мая 2009 г. 2:04, спустя 5 минут 25 секунд

    Помню в 2007 писал парсер RTF совместно с g0ff, вот это был запар… ))
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!