langcc新一代的編譯器編譯器
langcc 是一個工具,它以標準BNF風(fēng)格的格式獲取語言的形式化描述,并自動生成一個編譯器前端,包括語言的抽象語法樹(AST)和遍歷的數(shù)據(jù)結(jié)構(gòu)定義、一個詞典、一個解析器和一個pretty-printer。
langcc 也是以下技術(shù)報告的配套軟件實現(xiàn),這些報告描述了對經(jīng)典LR解析范式的若干創(chuàng)新:
- Zimmerman, Joe. Practical LR Parser Generation. arXiv, 2022.
- Zimmerman, Joe. langcc: A Next-Generation Compiler Compiler. arXiv, 2022.
langcc可以用來替代lex和yacc(或flex和bison)的組合。但langcc提供了許多額外的功能,包括:
- 通過獨立的數(shù)據(jù)類型編譯器 (
datacc) 自動生成 AST 數(shù)據(jù)結(jié)構(gòu)。 - 完整的 LR 解析器生成作為默認值,而不是更具限制性的 LALR。
- 通過明確的“混淆輸入對”,而不是不透明的移位/減少錯誤,清晰地呈現(xiàn) LR 沖突。
- LR 自動機的新效率優(yōu)化。
- LR 范式的擴展,包括遞歸下降 (RD) 解析操作,從而產(chǎn)生更小、更直觀的自動機。
- LR 范式的擴展,包括每個符號屬性,這對于許多工業(yè)語言結(jié)構(gòu)的有效實現(xiàn)至關(guān)重要。
- LR 語法 (CPS) 的一般轉(zhuǎn)換,顯著擴展了該工具可以支持的語法類別。
與以前的編譯器前端生成器不同,langcc高效且通用,足以捕獲完整的工業(yè)編程語言,包括 Python 3.9.12 ( grammars/py.lang ) 和 Golang 1.17.8 ( grammars/go.lang )。在這兩種情況下,langcc自動生成比每種語言的標準庫解析器更快的解析器(分別快 1.2 倍和 4.3 倍)。事實上,langcc所支持的語法類足夠通用,該工具是 self-hosting 的:即可以勇“語言的語言”本身中表達“語言的語言”,并用于langcc 生成自己的編譯器 front-end。
更多細節(jié)可見源碼庫中 bootstrap.sh 和 grammars/meta.lang 文件。
langcc是一個研究原型,尚未在生產(chǎn)中廣泛使用。但開發(fā)團隊表示,它本質(zhì)上是穩(wěn)定的且功能完整的,并且可以用作獨立工具來促進對新編譯器和編程語言的快速探索。
評論
圖片
表情
