[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Парсер условия другого языка
Dangetsu
Собственно суть в том что есть условие такого типа:

goto_unless (intF[1089] == 1) @47

Прим. Если это условие ложно то переходим на флаг 47(switch)

И его нужно преобразовать в понятный для php код условия:

if($intF[1089] != 1){/*Тут прыжок*/}

Тут все довольно просто решается регулярным выражением, но условия бывают самыми разнообразными:

goto_unless (intF[1089] == 1 || !intF[8] && intG[0] != 1) @47

Прим. !intF[8] - означает что переменная будет равна "none"

И как тут поступить я смутно соображаю... Попробовать с помощью explode превратить выражение в скобках в массив, а потом с помощью рег.выражений считывать его?
Или есть способ попроще?
BaNru
Если я правильно понял...

По сути всё что внутри скобок в примерах php подобно
используй регулярку не на распарсивание того что внутри, а просто получи скобки целиком.
И тут не надо explode, тут надо preg_macth лучше использовать или str_replace'ом удалить лишнее.

Потом как-то с помощью $$var или ещё как-то заставить работать как условие.
sergeiss
Цитата (Dangetsu @ 9.02.2014 - 04:46)
но условия бывают самыми разнообразными...

goto_unless (intF[1089] == 1 || !intF[8] && intG[0] != 1) @47

Ну так ты сначала все условия разбери на части, например, знаки || и && являются такими разделителями. И для их поиска не надо никаких регулярок, не надо взрывать себе мозг там, где это излишне smile.gif
А потом уже, когда получишь отдельно intF[1089] == 1, !intF[8] и intG[0] != 1, преобразуй из в ПХП-условия, затем собери их вместе, используя ту же логику, что и в начальном выражении.


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.