簡體   English   中英

PHP是完全無上下文的語言還是它具有上下文相關的部分?

[英]Is PHP an entirely Context-Free Language or does it have Context-Sensitive parts?

PHP具有Bison語法文件 ,這是否意味着PHP是完全不依賴上下文的語言?

如果您要為php構建解析器,請查看現有解析器:

https://github.com/nikic/PHP-Parser-這是用php編寫的,是獨立的php解析器。

https://github.com/svalaskevicius/ionPulse/tree/master/ionParticles/ionPhp/phpParser-這是用於ionPulse IDE的php-support插件的一部分,用c ++編寫,功能測試在<...> / ionTests / phpparsertest.h [仍在進行中]

只是想出我要提到的情況,以防萬一您沒看過,除非您純粹為了學習,否則它可以節省很多時間。

檢出PHP Tokenizer函數 ,它將為您解析源文件為令牌。 然后,您可以跨過標記檢查源。

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

我認為您正在將數學與解釋性解析混合在一起。

查看結構和數據,然后確定問題背后的理由。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM