2016-09-26 17 views
0

おはよう!私はラムダ式をユーザーから受け付けるプログラムを作成しようとしています。このプログラムは、それが有効なラムダ式かどうかをチェックするものです。preg_matchを使った式の検証

例 - ユーザーの入力(λa.abc)A - >その後

私の問題は、私はこれを解決するためにするpreg_matchを使用して、まだあまりしてきた、正規表現関数の私の知識は非常に限られているということですが検証進歩のすべてのヘルプははるかに高く評価されます。.. :)おかげ

まあ、これらは有効なλ-表現

  1. 単一の変数=(単一の文字)
  2. 関数適用=(λの規則であります-expression)(λ発現)
  3. 関数抽象=λ(変数)。(λ発現)

これは私が本当によく私はあなたが基本的に「言ったので、私は、表現のあなたの定義からあまりを取得していないことを告白しなければならない

+0

これらの式の例とその有効/無効の例を掲載してください。現在までに自分で作成したコードだけでなく、 – ChristianF

+0

本当にご迷惑をおかけして申し訳ございません。私はちょっと新しくなりました – Gorodetski

+0

あなたの質問を編集して、すべての情報をよりわ​​かりやすい形で含めるようにしてください。 – ChristianF

答えて

1

動作しないするpreg_match

if(preg_match("/\((L([a-z])*.(([a-z])*)*)\)/", $getexpression, $match)): 
print "Valid!"; 

で行ったコードです式は変数、または変数の集合です。
私は、定義自体の中で定義しようとしている言葉を避けることをお勧めします。私はないんだけど、言われていること

// Basic definition: Lambda + letter == variable. 
$lVar = 'λ[a-z]'; 

// Complex definition: Variable, possibly followed by variables, 
// and closed with a letter preceeded by a dot or whitespace. 
$lExp = "({$lVar}(?:\\.{$lVar})*(?:[ .][a-z]+))"; 

// Complete definition: 
// 1. Only single expression. 
// 2. Or a parameterized expression which may contain 
//  the entire pattern recursively. 
$lRegEx = "/^$lExp|\\($lExp(?R)\\)\\Z/u"; 

:Wikipediaやコメントにまで読んでから、私はこのための作業を正規表現として解釈することができるものに得ているかもしれないと思う、と述べ

これは正規表現でテストできることを100%確信しています。少なくとも完全にはない。これは、tokenizerの書き込み/使用が必要な種類のようです。