簡體   English   中英

使用Ragel解析C ++代碼庫中的字符串的原因是什么?

[英]What are the reasons for using Ragel to parse strings in a C++ codebase?

我繼承了一個使用Ragel進行字符串解析的C ++項目。

這是我第一次看到這樣做,我想了解為什么有人會使用Ragel而不是C ++來解析字符串?

解析器生成器 (不正確地稱為“編譯器-編譯器”)使用起來非常英俊,並且可以生成可靠且高效的C ++或C代碼(特別是因為解析理論已廣為人知)。

通常,使用源代碼生成器可能是明智的選擇。 有時,特別是在大型項目中,編寫自己的代碼是明智的(閱讀有關元編程的信息 ,尤其是SICP甚至J.Pitrat的博客 )。 良好的構建自動化工具(例如GNU makeninja)可以輕松配置為運行C或C ++代碼生成器並在構建時使用它們。

閱讀Ragel簡介。 還可以查看flexbisonANTLRrpcgenQt mocswiggperf作為C或C ++生成器的常見示例。

在某些程序中,您甚至可以使用某些JIT編譯庫(例如libgccjitLLVM )在運行時動態生成代碼並使用它。 在POSIX系統上,您還可以在運行時生成一個臨時C或C ++文件,將其編譯為插件 ,然后使用dlopendlsym加載該臨時插件。 那么,具有良好的編譯器和解釋器文化(例如,通過Dragon Book )是值得的。

在您的應用程序中嵌入一些解​​釋器(例如luaguile )也是一種有趣的方法。 但這是一個強大的體系結構決策。

在許多情況下,生成源代碼要比手寫源代碼容易。 當然,這並不總是可能的。

PS。 在閱讀您的問題之前,我從未聽說過拉格爾!

暫無
暫無

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

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