PHP是一种完全与上下文无关的语言,还是有上下文敏感的部分?

PHP是一种完全与上下文无关的语言,还是有上下文敏感的部分?,php,grammar,Php,Grammar,PHP是如此,这是否意味着PHP是一种完全与上下文无关的语言?我认为您将数学与解释性解析相结合 查看结构和数据,然后确定问题背后的理由 我想如果你没有看到,我会提到这一点,这可能会节省你很多时间,除非这是纯粹的学习 查看PHP,它将为您将源文件解析为令牌。然后,您可以跨过标记来检查源代码 此示例取自PHP.net,它将源文件读入令牌,并用去掉的注释复制它: <?php /* * T_ML_COMMENT does not exist in PHP 5. * The following th

PHP是如此,这是否意味着PHP是一种完全与上下文无关的语言?

我认为您将数学与解释性解析相结合


查看结构和数据,然后确定问题背后的理由

我想如果你没有看到,我会提到这一点,这可能会节省你很多时间,除非这是纯粹的学习

查看PHP,它将为您将源文件解析为令牌。然后,您可以跨过标记来检查源代码

此示例取自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;
       }
   }
}
?>

如果您正在为php构建解析器,请查看现有的解析器:

-这是用php编写的,是一个独立的php解析器


这是一个用C++编写的PHP支持插件,其中功能测试是在/iNoTest/PHPARSertTest.h中[仍然在进行中的工作] < /P>为PHP构建解析器。类似的问题有:让我相信SO是最好的地方,但是欢迎对另一个堆栈交换的建议!“查看结构和数据”?我还修改了这个问题,希望这更容易回答?我同意Jazz上面的评论。请改进您的问题,使其符合so的工作原理。谢谢!这更像是一个学习项目,使用PHP进行标记化有一个缺点,即您无法标记为更高(并且在较小程度上是更小)的PHP版本标记编写的PHP代码(如在只有PHP5.2的CI环境中解析trait代码)。