【问题标题】:Create a new embedded language using PHP使用 PHP 创建新的嵌入式语言
【发布时间】:2010-12-31 09:18:53
【问题描述】:

我正在尝试开发一个管理面板并且我有一个命令行。当用户发送如下命令时,我需要使用 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;

我可以从哪里开始创建这种非常小的嵌入式语言,或者我怎样才能真正做好?

请给出聪明的答案。

【问题讨论】:

标签: php command-line administration embedded-language


【解决方案1】:

假设这个命令行是交互式的,你就给自己设置了不小的任务。基本上你必须写一个interpreter。假设lexical analysis 是微不足道的,除了命令集背后的代码之外,您将花费大部分时间编写parser

如果您的命令行交互性极低,并且您的命令词汇量相对较小(大约为几个命令),您可以使用正则表达式编写一个简单的识别器。鉴于您允许的参数示例,正则表达式可能会很快变得粗糙。在那种情况下,或者在你的词汇量有点大的情况下(超过几个,可能少于 20 或 30 - 作为在黑暗中站不住脚的刺),你可能需要转移到一个简单的状态 -基于解析器,从命令行中提取标记,直到出现错误或可以处理的完整命令。

它的失控程度完全取决于您使命令词汇及其参数的复杂程度。如果你到了需要用 ANTLR 之类的东西编写语法的地步,那么你已经走得太远了,可能正在构建一种新的编程语言。 :-)

【讨论】:

    【解决方案2】:

    我认为这是很多工作...... 您必须先在“-”处拆分字符串。 $Split_string = explode("-", $cmd_line_input); 那么您应该检查要包含在命令行中的动词的第一个字符串,然后进行不同的情况: Verb_array = explode(" ", $Split_string[0]); switch($Verb_array[1])

    案例创建: 在此处创建页面并在发现动词时发现属性? 我在我的 ipod 上,所以我不能把它全部写出来,但我认为你可以从这个开始

    【讨论】:

      【解决方案3】:

      为了简单起见,我会使用:

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

      问候, //t

      【讨论】:

        【解决方案4】:

        一次只接收一个 var,然后根据对该单个 var 的验证来接受或拒绝它,然后如果接受它来执行下一个任务,则最终继续前进(无论是开始一个序列或向用户询问另一个变量)。

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

        这种方法会减少大量的解析,并且很容易维护。

        【讨论】:

          猜你喜欢
          • 2011-04-20
          • 1970-01-01
          • 2011-01-07
          • 2023-04-08
          • 1970-01-01
          • 1970-01-01
          • 2016-05-22
          • 1970-01-01
          • 2018-01-13
          相关资源
          最近更新 更多