这基本上是my first Question的第二部分,它是关于制作源代码的浏览器。阅读教程后,我发现我需要解析PHP文件和Build AST,并从那里我将有我需要的符号。然而,寻找日子并没有为我如何做到这一点带来任何益处。有没有关于构建PHP AST的任何教程或问题? 对不起,如果它在某个地方回答,我的搜索没有任何用处!Flex /野牛PHP AST生成
回答
您可以看看PHP如何执行它:https://svn.php.net/repository/php/php-src/trunk/Zend/zend_language_parser.y。请注意,尽管PHP使用re2c而不是flex(语法在./zend_language_scanner.l中)。
在2017年有稳定和强大的工具 - PHP-Parser。
它允许TOKEN解析和AST源代码解析。
这是AST code generation example。
如果你找C扩展,将允许它,检查nikic/ast。
不幸的是我看不到任何文档在PHP之外使用它。 – 2017-07-09 15:49:04
我建议在那里提问。我认为@nikic能够比你更多地帮助你。 – 2017-07-09 16:16:38
谢谢指出 – 2017-07-10 05:41:23
- 1. Flex和野牛
- 2. YACC(野牛)AST简化
- 3. 简单的Flex /野牛C++
- 4. 使用Flex /野牛
- 5. 的CMake和Flex /野牛
- 6. 循环使用Flex /野牛
- 7. 野牛回传得到的AST
- 8. Flex和野牛计算器
- 9. flex与野牛计算器
- 10. 野牛/ Flex如果语句
- 11. 故障使用Flex /野牛
- 12. 野牛/ flex解析器进入eclipse
- 13. 问题与野牛和flex计算器
- 14. 嵌入其他语言的Flex /野牛
- 15. 使用Flex(法)和野牛(YACC)
- 16. 从flex传递值到野牛
- 17. 的Flex /野牛EOF传播VS文件
- 18. flex和野牛:错误的输出
- 19. 北美野牛和flex分段错误
- 20. 的Flex /野牛语法错误
- 21. Flex /野牛目标不存在
- 22. 野牛(和flex)编码约定
- 23. 的Flex /野牛 - 启动条件
- 24. Flex /野牛多通类解析
- 25. 从flex返回属性到野牛
- 26. 解析使用flex和野牛的块
- 27. 使用flex和野牛的问题
- 28. 野牛的Flex不能访问第一个令牌野牛规则部分
- 29. 与野牛生成的文件的循环依赖解析
- 30. 劈裂野牛
我已经看过文件并阅读了野牛和flex手册,但它很复杂!有没有你认识的教程,或者可以解释一下? – 2012-01-12 21:51:46
@Stefano flex和野牛的教程?在手册中介绍了他们的概念。另一方面,如果想在另一个问题中加入一个完整的“代码浏览器”,则是我能想象的最复杂的工作之一。我会在编写扫描器之后开始抛出zend_language_parser.y中的所有操作,这些操作应该为您提供验证解析器,然后为“类”,方法定义等插入操作。但在95%的案例中,成为一个令人满意的ctags客户可能会更有效率。 – 2012-01-13 01:28:16
你好,我去了ctags路由,它不支持PHP很好,我不知道该成员或方法属于哪一类。如果你知道我不走这条路。这是我的最后一招! – 2012-01-13 03:00:53