Edison Design Group提供解析計算機編程語言的技術,其前端(front end)產品讀取源代碼并生成完全描述代碼結構和含義的信息?;谶@些信息,用戶加入自己的軟件來創建編譯器、源代碼分析工具和芯片設計應用程序,
EDG C++前端于1992年首次發布,支持ISO/IEC 14882 standard。 完全支持C++17, C++14、C++11和 C++98/03版本的語言,C++20 語言特性的支持正在開發中。在命令行選項的控制下,前端也支持ANSI/ISO C ( C89和C99、Embedded C TR)、Microsoft C和C++的方言(包括C++/CLI)、GNU C和C++、Clang C和C++、Sun C++、cfront 2.1和3.0.n的C++方言以及K&R/pcc C.
前端執行包括全部錯誤檢查在內復雜的語法和語義分析,可以產生大約2500個不同的錯誤診斷,它們出現在源代碼行中,并以“^”號指示精確的錯誤位置。診斷的級別可以通過多種方式控制。
對源代碼中的字符串、標識符、注釋和文件名字,前端能夠識別國際字符集,包括多字節字符和多種Unicode編碼。前端做出的診斷可以收進錯誤消息目錄中,后者可輕易轉譯為其他語言。
前端把源程序翻譯為高層的、樹結構的、駐留于內存的中間語言,它保留了大量的源信息(如代碼行號、列號、原始類型、原始名稱),有助于產生符號化的調試信息。源程序中的隱式和重載操作在中間語言中變成顯式操作,對結構無添加、刪除或重排序的工作。中間語言不依賴機器的(如,不指定寄存器,也不描述棧的布局)。前端還可選擇性地產生原始的交叉索引,這可作為源程序瀏覽工具的基礎。
前端集成了一個預處理器,執行現代的或pcc風格的預處理。一般來說,預處理器作為前端的一部分來運行,不會產生其他的中間文本文件。然而必要時可以產生預處理的輸出文件??梢詣摻ú⑹褂妙A編譯頭文件。
EDG C++還包括以下組件:
●C后端(back end),用于為C++程序產生C代碼
●C++后端,用于源文件-源文件之間的轉換應用
●預鏈接器,處理自動的模板實例化
●最小的運行時庫(不是任何“實際”的庫,比如流I/O)
●實用程序,在中間語言和文件之間雙向讀寫,顯示為可讀格式
●名還原工具(name demangler)
前端由大約536,000行源代碼構成,其中30%為注釋。代碼是用ANSI/ISO C編寫的,并謹慎保持代碼的平臺獨立性,能夠方便地在不同的機器和操作系統中重用。既然主機和目標機依賴是單獨配置的,前端就可作為交叉編譯器的部分而使用。代碼中含有大量調試信息和一致性檢查,可以通過條件編譯對它們進行包含和排除。
內部文檔共600多頁,外部接口章節包含命令行選項、語言方言問題以及語言特性例如模板的使用,可以免費下載pdf版本。
支持的語言特性
下面信息反映的是2018年八月發布的C++前端分析器的5.0版本,
前端可以接受由ISO/IEC 14882:2017 ("C++17")標準(可以配置成支持早期版本,即, ISO/IEC 14882:2003, ISO/IEC 14882:2011, 和ISO/IEC 14882:2014)定義的C++語言。也接受ISO/IEC 9899:2011 ("C11") ISO/IEC 9899:1999 ("C99")和 ISO/IEC 9899:1990 ("C89")標準定義的C語言以及 ISO/IEC TR 18037定義的 "嵌入式 C"的擴展。
值得重點說明的是,EDG前端支持完整的C++2017標準。C++的復雜性使多數編譯器省略了它的一部分,而那些少數支持完整語言的編譯器都建立在EDG前端基礎之上。隨著C++和C標準的更新,EDG前端也將持續更新,以保證完全支持新的語言特性。
然而現實世界中,任何程序都很難完全遵循C++或C標準。EDG前端的“嚴格”標準模式對運行測試套件是有用的,有助于檢查程序中沒有非標準的用法,只是顯得有些過于學究氣。所以,前端也提供了針對C++和C的更為寬松的默認模式,以及對多數流行編譯器的兼容模式:
●Microsoft C和C++兼容模式
提供Microsoft Visual C++ 編譯器所支持的擴展(目前到Visual Studio 2017包括C++/CLI特性),和多種未經文檔化的特性和bug。
●GNU C和C++兼容模式
支持GCC(版本3.2-7.3)的語言擴展,和多種未經文檔化的特性和bug。兼容性足夠強大到可以編譯Linux核及其工具。
●Clang C和C++兼容模式
●Sun C++兼容模式
●cfront兼容模式,模擬早期的AT&T cfront處理器。
EDG C++前端
● 根據適當的編譯選項,識別多種非標準的C++和C的方言,尤其是Microsoft C++和C、GNU C++和C、以及K&R C。
● EDG C++前端在集成了預處理的Single Pass過程中完成轉換,具有對應的選項指定只進行預處理,輸出預處理后的源碼。
● EDG C++前端把C++或C源代碼翻譯為高度的樹結構的內存中間語言,包含源的一致性信息。
● EDG C++前端執行錯誤檢查,提供包含錯誤位置在內的錯誤信息,最小化錯誤信息的層疊。
● EDG C++前端是用C的一種可移植方言編寫的,主機和目標機的特性在代碼中分隔開來。
● EDG C++前端在條件編譯指令的控制下有選擇地包含對代碼的調試和斷言檢查。
● EDG C++前端不含C++或C的庫的源代碼或目標碼,除了IL底層與C生成后端所需的最小的運行時庫。
● EDG C++前端對浮點的支持(包括浮點轉換和浮點常數運算的折疊)使用ISO C語言中的可移植技術。
● EDG C++前端中任何與日期相關的處理對閏年、新的百年、新千年都功能正確。
● 產品全部以源碼形式提供。