我想创建一个php解析器。我正在考虑使用lex / yacc来完成任务。
这是一个好主意吗?还是有更好的方法?
在哪里可以找到已经制作的用于php语言的lex / yacc。或者至少是语法?
答案 0 :(得分:2)
参见Zend / zend_language_parser.y。
答案 1 :(得分:0)
请参阅我们的PHP Front End。这不是使用传统的LEX和YACC构建的,而是具有很大的优势,可以定义一个强大的解析器,并且在这一点上进行了几年的硬敲击测试。使用完整详细的语法,它解析完整的PHP5(这很难,语言定义很差),包括获取有关插值字符串值的所有细节,自动构建AST,并且可以将AST重新打印回完全有效的PHP源文本保留布局,包括评论。
除了解析之外,总会有生命。并且需要工具来支持分析或修改代码以实现实际目的。 PHP前端底层的引擎DMS Software Reengineering Toolkit提供了我们使用的类似LEX和YACC的机制,并且还提供了程序导航/检查/修改AST的能力,提供了源到源重写规则。模式匹配和/或代码转换,支持构建符号表,并提供控制和数据流分析框架。这种机器使得更容易专注于完成工作,而不是在遇到需要时尝试专门实施这种机器。 (DMS实际上使用前端作为集成方式处理各种语言)。
答案 2 :(得分:0)
你可以在rphp_grammar的github中找到rphp_grammar.y rphp_grammar