2011-04-11 95 views
1

我在考慮創建一個基於C的自定義(小)編程語言(語法)。 我不明白蘋果如何用像[testClass runThis:true]這樣的運算符實現objective-c;用那個語法。創建編程語言問題

我將如何實現自定義的語法爲我定製的C語言

回答

5

你可能想看看Clang(在C,C++和LLVM編譯器的對象 - 前端)和Eero Programming Language,基於一種新的語言在用LLVM構建的Objective-C上。這兩個項目都是開源的。

2

你需要實現一個解析器和一個詞法分析器來開始。一種方法是從K的「C編程語言」中獲取C語法和語法,並將其用作Flex和Bison的輸入來創建獨立的解析器。這將解析語法上有效的C程序。之後,您可以根據需要對其進行調整並對其進行自定義。

然而這是一個不平凡的項目,你必須準備好自學大量的編譯器。祝你好運!

+0

我正在嘗試創建基於C的自定義語法編程語言,如objective-c – Daniel 2011-04-11 10:34:57

0

升級到C++並且您可以創建DSEL(特定於域的嵌入式語言)。我不知道你想解決什麼問題,但是精心設計的DSEL可能比設計自己的語言和創建解析器,編譯器等方便得多。拿一本這本書的副本來獲得一些見解:C++ Template Metaprogramming

1

你必須編寫一個編譯器。如果你的語義符合,你可能會直接編譯爲C代碼;否則你還必須爲你的語言編寫一些運行庫,這些運行庫不容易直接翻譯成C語言。鑑於你在談論一個基於C語言的小型語言,但這可能不是問題。

你如何去做這件事?哦。人。

關於writing a compiler的主題有幾十本書,文章,教程等。儘管沒有單獨的編譯器特別困難(至少對於天真的非優化編譯器),但是有很多東西需要通過很多不同的方式來應對,通常是彼此巧妙地不兼容的方式。

至少,你會希望有一個lexer(通常是通過像flex或作爲一個編譯器套件像ANTLR的一部分自動化工具),一個parser(通常是通過自動化的工具,如Bison和上述ANTLR)和code generator (通常由手工產生)。實際上,你可能想要在解析器和代碼生成器之間插入一個abstract syntax tree,以便爲您(或其他人)提供實現各種optimizations的空間,並使代碼生成變得更簡單。

lots of books這個主題,更不用說研究論文。玩的開心。你試圖做的是具有挑戰性,但當你把它關掉時會有所收穫。