Создать новый встроенный язык, используя PHP - PullRequest
2 голосов
/ 31 декабря 2010

Я пытаюсь разработать панель администрирования, и у меня есть командная строка .Когда пользователь отправляет команду, как показано ниже, мне нужно распознать ее с помощью PHP.

Моя цель - упростить задачи в панели администратора.

 create page -attr1 90 -attr2 'page title';

или

 update category 90 -name 'Technology';

Есть две основные вещи:

  1. Глагол и тема (т.е. создать страницу, обновить категорию)
  2. Атрибуты (могут быть как STRING, так и INT)

и более сложный пример:

create page -name EN:'Static Page' CA:'Statična Stranica' -category 3,6,12,15;

С чего мне начать создавать этот очень маленький встроенный язык или как я могу сделать это действительно хорошо?

Умные ответы, пожалуйста.

Ответы [ 4 ]

3 голосов
/ 31 декабря 2010

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

Если ваша командаСтрока минимально интерактивна, и ваш командный словарь относительно мал (порядка нескольких команд), вы можете с легкостью написать упрощенный распознаватель с регулярными выражениями.Учитывая примеры параметров, которые вы разрешаете, регулярные выражения, вероятно, получатся довольно быстро.В этом случае, или в случае, когда ваш словарный запас немного больше (больше, чем несколько, вероятно, меньше, чем 20 или 30 - как неоправданный удар в темноте), вам, вероятно, придется перейти к простому состоянию -основанный синтаксический анализатор, извлекающий токены из командной строки до тех пор, пока у вас не появится ошибка или завершенная команда, которую вы можете обработать.

Выход из-под контроля полностью зависит от того, насколько сложен ваш словарь команд и их параметры.Если вы дошли до того, что вам нужно написать грамматику в чем-то вроде ANTLR, вы зашли слишком далеко и, вероятно, создаете новый язык программирования.: -)

1 голос
/ 31 декабря 2010

Было бы намного проще просто взять одну переменную за раз и принять или отклонить ее на основе проверки этой единственной переменной, а затем, наконец, двигаться дальше, если принято выполнять следующую задачу (будь то началоПоследовательность или запросите у пользователя другую переменную).

http://en.wikipedia.org/wiki/Finite-state_machine

Этот подход исключит большое количество анализа и будет довольно прост в обслуживании.

1 голос
/ 31 декабря 2010

Для простоты я бы использовал:

$args = explode(' ',$yourstring);
$cmd = array_shift($args);
//use function or class now upon requested cmd.
//pass the args, just as any bash...

regards, // t

1 голос
/ 31 декабря 2010

Я думаю, что это много работы ... Вы должны сначала разбить строку на "-".$ Split_string = explode ("-", $ cmd_line_input);затем вы должны проверить первую строку в глаголах, которые вы хотите включить в вашу командную строку, а затем сделать разные случаи: Verb_array = explode ("", $ Split_string [0]);switch ($ Verb_array [1])

Случай создания: создайте страницу здесь и откройте атрибуты, когда вы открываете глаголы?Я на своем Ipod, так что я не могу написать все это, но я думаю, что вы можете stArt с этим

...