2

管理パネルを開発しようとしていますが、コマンドラインがあります。ユーザーが以下のようなコマンドを送信する場合、PHPを使用してそれを認識する必要があります。

私の目的は、管理パネルのタスクを簡素化することです。

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

また

 update category 90 -name 'Technology';

主に2つあります。

  1. 動詞と主語(つまり、ページの作成、カテゴリの更新)
  2. 属性(STRINGとINTの両方にすることができます)

より複雑な例:

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

この非常に小さな埋め込み言語をどこから作成し始めることができますか、またはどうすればそれを実際にうまく行うことができますか?

賢い答えをお願いします。

4

4 に答える 4

3

このコマンドラインがインタラクティブであると仮定すると、小さなタスクはありません。基本的に、インタプリタを作成する必要があります。字句解析が簡単であると仮定すると、コマンドセットの背後にあるコードに加えて、パーサーの記述にほとんどの時間を費やすことになります。

コマンドラインのインタラクティブ性が最小限で、コマンドの語彙が比較的少ない場合(数コマンド程度)、正規表現を使用して単純な認識機能を作成する必要があります。許可しているパラメーターの例を考えると、正規表現はおそらくかなり迅速に危険にさらされるでしょう。その場合、または語彙が少し多い場合(暗闇の中で防御できない刺し傷として、数より多く、おそらく20または30未満)、おそらく単純な状態に移行する必要があります-ベースのパーサー。エラーまたは処理可能な完全なコマンドが発生するまで、コマンドラインからトークンをプルします。

それがどのように制御不能になるかは、コマンドの語彙とそのパラメーターをどれだけ複雑にするかに完全に依存します。ANTLRのようなもので文法を書く必要があるところまで来たら、行き過ぎて、おそらく新しいプログラミング言語を構築しているでしょう。:-)

于 2010-12-31T09:48:03.427 に答える
1

大変な作業だと思います...最初に「-」で文字列を分割する必要があります。$ Split_string = explode( "-"、$ cmd_line_input); 次に、コマンドラインに含める動詞の最初の文字列を確認してから、さまざまなケースを作成する必要があります。Verb_array = explode( ""、$ Split_string [0]); switch($ Verb_array [1])

ケースの作成:ここにページを作成し、動詞を見つけたときに属性を見つけますか?私のiPodにいるので、すべてを書き出すことはできませんが、これでstArtできると思います

于 2010-12-31T09:33:21.817 に答える
1

簡単にするために、次を使用します。

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

よろしく、// t

于 2010-12-31T09:43:00.067 に答える
1

一度に1つの変数を取り込んで、その単一の変数の検証に基づいてそれを受け入れるか拒否し、次のタスクを実行することが受け入れられた場合は最終的に先に進む(シーケンスを開始するか、要求するか)方がはるかに簡単です。別の変数のユーザー)。

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

このアプローチは、大量の解析を削減し、保守が非常に簡単になります。

于 2010-12-31T17:12:05.467 に答える