Yantra 是一款強大的編譯器編譯器與 LALR(1) 解析器產生器,以 C++ 編寫,核心功能如下:

Yantra 的名稱源自梵語,意為「機器」,在此脈絡下指狀態機。

Yantra 除了 C++ 標準函式庫外,沒有任何其他依賴,因此建置過程僅需 CMake:

這會在 bin/ 目錄下產生 ycc 可執行檔。儲存一個文法檔案,例如 hello.y:

這會產生 hello.cpp(一個整合式、獨立的解析器,內含自己的 main() 函式)以及 hello.log。使用任何 C++23 編譯器進行編譯:

上述文法可識別一個或多個以空白字元分隔的字母單字。-s <字串> 會將該字串直接餵給解析器作為輸入(相較於 -f <檔案名稱>,它會從檔案讀取;或 -i,它會從主控台互動式讀取):

Yantra 會先將整個輸入解析成抽象語意樹 (AST),然後由上而下走訪並呼叫您的語意動作,這與大多數解析器產生器不同,後者在每個規則被歸約時由下而上執行動作。這種順序讓父節點的動作在子節點被訪問前執行。將此儲存為 calc.y:

與上述方式相同進行產生與編譯(bin/ycc -c ascii -f calc.y -a,然後執行三個編譯器指令中的任一個),然後執行它:

1 + 2 + 3 會以左結合方式解析為 (1 + 2) + 3。因此,最外層的 Adding(樹的根節點)會最先列印,接著是它的左子節點(Number: 1),然後是它的右子節點,它本身是另一個 Adding 節點,並帶有自己的兩個子節點。手寫的遞迴下降或由下而上解析器必須建置額外的 AST 類別和獨立的走訪步驟才能獲得此順序。在這裡,它直接從文法中產生。

請參閱下方的建置說明與教學,以實際演練文法語法。

請參閱已知限制,以誠實列出 Yantra 目前尚未實現的功能。

以下是一組關鍵連結,可幫助您熟悉 Yantra。

建議依給定順序閱讀。

請參閱 https://github.com/TantrixAuto/lingo,這是使用 yantra 的獨立範例專案。

這是由 Raj Chaudhuri 創建的語言伺服器擴充功能,為 vscode、qtcreator 和任何支援語言伺服器協定 (LSP) 的 IDE 提供 Yantra 檔案的語法突顯功能。

https://github.com/rajware/yantra-language-server

Yantra 在 MIT 授權條款下授權。

一款 C++ 解析器產生器:詞法分析、語法分析與抽象語意樹生成整合於一個工具中。

Yantra:一款 C++ 解析器產生器,整合詞法分析、語法分析與抽象語意樹生成Yantra:一款 C++ 解析器產生器,整合詞法分析、語法分析與抽象語意樹生成Yantra:一款 C++ 解析器產生器,整合詞法分析、語法分析與抽象語意樹生成Yantra:一款 C++ 解析器產生器,整合詞法分析、語法分析與抽象語意樹生成Yantra:一款 C++ 解析器產生器,整合詞法分析、語法分析與抽象語意樹生成