获取节点偏移量和长度

时间:2019-05-10 16:17:13

标签: php php-parser

我正在使用软件包nikic/php-parser来解析用户提供的PHP文件。该文件将具有一些PHP函数,我需要知道哪个函数以及定义的确切偏移量和长度。

例如:

Line | Content
   1 | <?php\n
   2 | function x() { }\n
   3 | x();

在这种情况下,我有一个名为x的函数,而 offset function的起始位置)为 6 ,而< em> length 一直计数到},在这种情况下为 16

因此,我在解析器上启用了两个属性:startFilePosendFilePos,但是由于某种原因,它不会向我提供这些信息。

1 个答案:

答案 0 :(得分:0)

好的,现在我看到了...

我的运行方式如下:

$this->parser = (new ParserFactory)->create(ParserFactory::ONLY_PHP7, null, [
    'usedAttributes' => [ 'startFilePos', 'endFilePos' ]
]);

但是实际上,第三个参数没有像我期望的那样传递给Lexer,它仅支持不推荐使用的选项throwOnError

所以我直接将其应用于Lexer:

$this->parser = (new ParserFactory)->create(ParserFactory::ONLY_PHP7, new Lexer([
    'usedAttributes' => [ 'startFilePos', 'endFilePos' ]
]));

现在我可以正确接收文件偏移了。