2011-07-25 162 views
1

我想創建一個php parser.i想用lex/yacc來完成任務。使用lex和Yacc來解析php

這是一個好主意嗎?或者有更好的方法?

我在哪裏可以找到一個PHP語言已經制作好的lex/yacc。或者至少是語法?

+1

人,這一點是毛。 – hop

回答

2

參見Zend/zend_language_parser.y。

+3

你也需要lex文件,而且你還沒有一棵樹可以工作。 –

0

查看我們的PHP Front End。這不是使用傳統的LEX和YACC構建的,但是它具有定義一個強大的解析器的巨大努力的優勢,並且在這一點上已經有數年的艱難的敲擊測試。使用完全詳細的語法,它解析完整的PHP5(這很難,語言定義不明確),包括獲取關於插值字符串值的所有細節,自動生成AST,並可以將AST重新打印回完全有效的PHP源文本,包括評論。

總是有解析之外的生活。而且需要一些工具來支持分析或修改代碼以達到實際目的。 PHP前端底層的引擎DMS Software Reengineering Toolkit提供了我們使用的類似LEX和YACC的機制,並且還提供了對程序性導航/檢查/修改AST的能力,爲模式匹配提供了源到源重寫規則, /或代碼轉換,支持構建符號表,並提供控制和數據流分析框架。這種機制使得專注於完成工作變得容易得多,而不是像你遇到需要那樣專門實施這種機制。 (DMS實際上使用前端作爲集成手段來處理各種語言)。

+0

這是一個已知的錯誤,在lex中的名稱定義不起作用(我必須將正則表達式複製到規則部分以使其工作,我的lex版本是'2.5.4')?我在同一個問題上看到兩個帖子:http://stackoverflow.com/questions/6971581/have-problem-with-lex和http://stackoverflow.com/questions/5602156/definitions-in-lex-not-但是當正則表達式複製到規則它可以工作 –

+1

@Je Rog:對不起,你是要求我告訴你爲什麼lex 2.5.4不符合你的期望? 1)SO禮節說,如果你有問題要問,那就把它當成一個問題,或者如果你發現了一個理想的問題,在一個評論中投票和/或詳細說明,2)其實我不知道你的問題的答案。儘管已經構建了一個可用的PHP解析器,但我們不使用傳統的YACC或LEX;相反,我們使用我們自己的類似LEX和YACC的內部工具。他們已經命名了像LEX這樣的定義,就像你想要LEX的工作一樣,但這與你的具體問題無關。 –