Форум → Программирование → PHP для идиотов → Синтаксический разбор. Конечный автомат. (SQL :param -> ?)
Синтаксический разбор. Конечный автомат. (SQL :param -> ?)
-
-
7 мая 2009 г. 11:36, спустя 18 часов 19 минут 57 секунд
А просто предварительно вырезать камменты нельзя? -
7 мая 2009 г. 12: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] : '';
}
} -
7 мая 2009 г. 13:04, спустя 5 минут 25 секунд
Помню в 2007 писал парсер RTF совместно с g0ff, вот это был запар… ))https://smappi.org/ - платформа по созданию API на все случаи жизни
Пожалуйста, авторизуйтесь, чтобы написать комментарий!