Элементарные действия с ".+-". Почему 5...7 == 50.7?

Placido

Наблюдаю
В продолжение темы. Хочу организовать проверку вводимого php-кода (callback-функции, которая используется в в preg_replace_callback()) на безопасность без его запуска (и без использования eval()). Чтобы написать парсер, пытаюсь до конца разобраться, что должно быть разрешено в синтаксисе вводимого кода. И столкнулся с элементарными вещами, которые никак не могу понять.
Первое:
PHP:
$num = 5..7;
echo $num;//Parse error: syntax error, unexpected '.7' (T_DNUMBER) in

$num = 5....7;
echo $num;//Parse error: syntax error, unexpected '.' in 

$num = 5...7;
echo $num;//50.7
Почему "5...7" превращается в 50,7, а не вызывает ошибку?

И еще одно:
PHP:
$e = 5-+-+-+-+-+-+7;
echo $e;//12
Почему "-+-+-+-+-+-+" не вызывает ошибки?
 

damner2

Новичок
Хочу организовать проверку вводимого php-кода (callback-функции, которая используется в в preg_replace_callback()) на безопасность без его запуска (и без использования eval()). Чтобы написать парсер, пытаюсь до конца разобраться, что должно быть разрешено в синтаксисе вводимого кода.
https://github.com/nikic/PHP-Parser
 

Placido

Наблюдаю
Спасибо за ссылку. Я думал о стороннем парсере, и, возможно, так и сделаю (или воспользуюсь функцией token_get_all()), но вопрос не о том. Сейчас я хочу разобраться, почему "5...7" превращается в 50,7", а "5....7" и "5..7" вызывают ошибку. Меня это ставит в тупик.
 

exxe_zero

Новичок
Может и не стоит пытаться понять это логически? В программах до сих пор полно нелогичных вещей, интерпретатор языка не исключение. Задайте более жесткие условия принимаемых конструкций. Продумайте это выражение со стороны программы, как она и способна ли воспринять как нужно синтаксис?
 
  • Like
Реакции: WMix

WMix

герр M:)ller
Партнер клуба
В программах до сих пор полно нелогичных вещей, интерпретатор языка не исключение.
это все потому что писавшие интерпретер далеки от человеческого сознания, поваришься в этой каше, тоже потеряешь логику...



ЗЫ: жизнь - матрица, люди - батарейки!
 
Сверху