2

PHP には Bison 文法ファイルがありますが、それは PHP が完全にコンテキストフリーの言語であることを意味しますか?

4

3 に答える 3

2

PHP用のパーサーを作成している場合は、既存のパーサーを確認してください。

https://github.com/nikic/PHP-Parser-これはphpで記述されており、スタンドアロンのphpパーサーです。

https://github.com/svalaskevicius/ionPulse/tree/master/ionParticles/ionPhp/phpParser-これは、c++で記述されたionPulseIDEのphp-supportプラグインの一部であり、<...>/で機能テストが行​​われます。 ionTests /phpparsertest.h[まだ作業中]

于 2012-05-13T12:49:15.620 に答える
1

見たことがない場合に備えて、これについて言及しておくと、これが純粋な学習用でない限り、時間を大幅に節約できる可能性があります。

ソースファイルをトークンに解析するPHP Tokenizer Functionsを確認してください。次に、トークンをステップ オーバーしてソースを調べることができます。

この例は、ソース ファイルをトークンに読み込む PHP.net から取得したもので、コメントを取り除いて再現しています。

<?php
/*
* T_ML_COMMENT does not exist in PHP 5.
* The following three lines define it in order to
* preserve backwards compatibility.
*
* The next two lines define the PHP 5 only T_DOC_COMMENT,
* which we will mask as T_ML_COMMENT for PHP 4.
*/
if (!defined('T_ML_COMMENT')) {
   define('T_ML_COMMENT', T_COMMENT);
} else {
   define('T_DOC_COMMENT', T_ML_COMMENT);
}

$source = file_get_contents('example.php');
$tokens = token_get_all($source);

foreach ($tokens as $token) {
   if (is_string($token)) {
       // simple 1-character token
       echo $token;
   } else {
       // token array
       list($id, $text) = $token;

       switch ($id) { 
           case T_COMMENT: 
           case T_ML_COMMENT: // we've defined this
           case T_DOC_COMMENT: // and this
               // no action on comments
               break;

           default:
               // anything else -> output "as is"
               echo $text;
               break;
       }
   }
}
?>
于 2012-05-11T20:56:18.147 に答える
-2

数学と解釈された解析が混在していると思います。

構造とデータを見て、質問の背後にある理論的根拠を判断してください。

于 2012-05-11T20:43:53.370 に答える