簡體   English   中英

有沒有一種方法可以在PLY中解析lex和yacc文件(Python Lex-Yacc)

[英]Is there a way to parse lex and yacc files in/to PLY (Python Lex-Yacc)

眾所周知,PLY試圖實現Lex和Yacc在Python中所做的事情。 我想知道庫是否提供了一種將.l(lex文件)或.y(yacc文件)本身解析/翻譯/轉換為PLY所使用的語法定義的方法。

這是用例,我有該語言的.l和.y文件,現在我想使用PLY解析以上述語言編寫的文件,以便我可以按照原始語言定義所聲明的那樣完全處理標記成為。

從來沒聽說過。

語法規范足夠相似,您通常可以復制和粘貼。 請注意,Ply解析器函數p_*對應於單個產品,而不是非終端產品; 如果動作相同,則Ply允許您將兩個產品組合到同一個動作函數中,但是對於機械平移而言,最好是每個產品從一個功能開始,然后再進行優化。 還要注意,Ply沒有實現默認操作$$ = $1 (以Ply術語表示p[0] = p[1] ),因此必須將它們明確化(在這種情況下,具有默認操作的所有生產都可以合並為一個解析器動作函數。)

層不執行規則中的動作; 如果您現有的yacc / bison解析器依賴於它們,則必須將其刪除。 野牛的-v輸出在這里很有用。

由於Ply依賴於Python的正則表達式庫,因此可能需要更改正則表達式,尤其是如果它們使用(f)lex宏定義。 同樣,在Ply中使用模式正則表達式變量會更改模式接受順序; 您可能一開始就要避免這些。 (即使具有模式功能,Ply也不執行最大的限制,但至少可以控制接受順序。)

與(F)lex不同,Ply無法優化大量正則表達式。 在(F)lex掃描器定義中,通常對每個關鍵字使用單獨的模式,依靠掃描器生成器來產生實際上是高效的特里樣狀態機。 Ply無法做到這一點,並且使用大量模式可能會嚴重打擊性能(盡管即使如此,詞法分析現在也很少成為性能瓶頸。)

暫無
暫無

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

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