[英]How to define a grammar for a programming language
如何為要從頭設計的新編程語言(命令式編程語言)定義語法(無上下文)。
換句話說:當您想從頭開始創建新的編程語言時,如何繼續。
一步一步來。
不用說,從表達式和運算符開始,向上處理語句,然后到函數/類等。保留一個標點符號用於什么。
並行定義語法,用於引用變量,數組,哈希,數字文字,字符串文字,其他內置文字。 同時並行定義數據命名模型和范圍規則。
檢查你的語法是否有意義集中在某個級別(文字/變量,運算符,表達式,語句,函數等),並確保來自其他級別的標點符號和標記散布或附加/預置不會導致歧義。
最后在EBNF中全部寫出來並通過ANTLR或類似方式運行它。
最好不要重新發明輪子。 我通常首先選擇序列來啟動和結束語句塊和函數,以及數學運算符,它們通常基本上類似於C語言,類似ECMAScript,類似於Basic,基於命令列表或基於XML。 這有助於解決人們習慣使用的問題。
當然,你必須提出一個非常令人信服的理由,不要放棄編寫新語言,只需堅持使用經過充分測試和使用的C,ECMAScript或Basic。
我經常開始定義新語言,但發現其他人已經在現有語言的某個地方實現了某個功能。
如果您的目標是某些特定項目的開發速度,那么如果您希望快速啟動並運行並希望減少大多數編譯語言中所需的鍵入量,那么您可能會更好地使用Python,Lua或SpiderMonkey等原型。 。
你想看看EBNF( Extended Backus-Naur Form )。
(假設你想編寫一個無上下文語法,那就是。)
你需要購買這兩本書語言實現模式:創建你自己的領域特定和通用編程語言(實用程序員)和權威Antlr參考:構建領域特定語言(實用程序員)他們擁有你真正需要的一切來開始創建您自己的語言,解析器,翻譯器,解釋器和/或編譯器
如果您的意思是定義語法,那么最好通過從現有語言開始並修改其語法來匹配您所使用的語法。 創建語法規范是一種相當機械的練習,在你自己的頭腦中使用一組模式。 例如,if語句是什么樣的? 它看起來像C
if <- if(exp) block
if <- if(exp) block else block2
還是喜歡ML?
if <- if exp then block else block end
或者你想使用像Lua這樣的其他人:
if <- if exp then exp end
if <- if exp then exp (elseif exp)* else exp end
語法和語義將這些決定編成法典。 請注意,這些都不適合在LALR或LL(*)編譯器生成器中實現,並且必須進行按摩以實現,因為它們是不明確的。
邁克爾·斯科特的編程語言語用學是對編程語言設計的一個很好的介紹。 它可以在亞馬遜上找到
看看Bison ,也許這就是你要找的東西?
在開始設計語言之前,您需要了解很多關於編程語言的知識。 我推薦Shriram Krishnamurthi編程語言:應用和解釋 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.