[執行方式]
cla(). [表示執行初始執行語句,也是普通執行函式]
cla(1, 2). [表示執行初始含參語句,在別的程式語言來說,就是簡單的執行函式]
cla1\func(1, 2). [表示執行函式內函式]
cla()\func(1, 2). [錯誤/正確,不能執行兩個函式,除非返回的也是自己的型別,這時候就必須新增上字尾了
cla()\func(a.int<=1, b.int<=2) [正確,清晰易懂絕不會差,因為之前已經定義了,執行絕不會有定義]
[前面有.的變數表示隱變數,它不會被外界獲取]
fun(): (
.var: 0.
a: fun\.var. [錯誤,獲取不到]
a: fun\var. [仍然錯誤]
[另外一種隱藏方法就是雙層域,這樣就是未命名域自然也呼叫不到]
很明顯,型別檢查不會再在函式端進行,只管入不管出,哎,這樣就可以新增不同字尾了
可以自定義字尾,同樣會進行型別檢測,這樣就可以區分函式
很明顯,自定義字尾也只有一開始定義的時候才有,並且也不允許重複定義
fun1.cls: func.cls. [正確]
fun1: func.cls. [正確]
fun1.cls: func. [可能正確]
構建自己的編譯器 十七 函式宣告
函式 f a int,b int a b f.按理說,預設返回值是變數函式都可以,但是返回值與字尾就沒關係了,它本身是乙個函式嘛,還要禁止它呢 但是這最後返回的時候確實有些不對勁,按理說也應該是int啊 類是有字尾的,函式是沒有字尾的,我把類和函式歸一了,這樣仍會報錯,但是也沒有問題,檢查在變數端檢...
打造自己的編譯器
為了更深入的了解程式設計的底層,就想研究下編譯。找了幾本編譯原理看,什麼正規表示式 自動機把我都搞糊塗了。把複雜的問題弄得更複雜,這不是我希望的。還是自己做個東西模擬下編譯過程。任務 讀入原始碼,輸出彙編。為什麼不直接生成機器碼?彙編可以直接看出編譯是否錯誤。先設定乙個語言模型 只有運算子 識別符號...
構建自己的編譯器(二)語法分析器
用來描述計算機語言語法的符號集。現在,幾乎每一位新程式語言書籍的作者都使用巴科斯正規化來定義程式語言的語法規則。擴充套件巴科斯 瑙爾正規化 ebnf 是表達作為描述計算機程式語言和形式語言的正規方式的上下文無關文法的元語法符號表示法。它是基本巴科斯正規化 bnf 元語法符號表示法的一種擴充套件。如由...