FORTH基础
?每次運行DOSBox 0.74 ? 都要執行一遍??Z:\>mount k d:\forth? ?, 然后 ? ? ? ? Z:\>K:(回車) ? ? ? ? K:\>cd pcforth(回車) ? ? ? ? K:\PCFORTH>forth(回車)
//筆記里面的return都表示輸入命令時候的換行 // '詞 '和 '數' 必須要用空格隔開,這樣FORTH才能識別,空格可以多個,但是必須有
??( 前面的15 space少了s )
詞典:FORTH的每個詞和它的定義都被登記在FORTH詞典中。FORTH把自己定義翻譯成詞典形式寫入詞典條目。這個過程叫做 ?"編譯"? 終端鍵入命令詞,會啟動 ?INTERPRET ?的詞,叫做 ??“文本解釋程序";
FORTH 程序中: 也是一個詞;
命名:
少數不能用來命名的詞: return:回車符,表示完成輸入; backspace:刪除符,表示要修改; space:空格,作為一個詞的結束;注意: n SPACE 用完會在棧中插入好多1,所以不要用SPACE,要就使用 SPACES 用完還會把事先壓入棧中要求顯示的空格數彈出來 ." ?:表示后面跟的是一個字符串; eg:??: GREET ?." ?HELLO , I SPEAK FORTH " ?; ? //這個標記要組合出現,不能空格隔開
堆棧:FORTH 運算符的操作場所
后綴表示法:
FORTH 語言采用的是后綴表示法,不是中綴表示法;目的是便于使所有需要數字的詞能從堆棧中取得他們。 eg: ? ?+ ? ? ? ? ? ? ?從棧中彈出兩個數字并把他們相加; ??????? ? . ? ? ? ? ? ? ? 從棧中彈出一個數字并打印它尾隨一個空格; ???????? ?SPACES ? 從棧中彈出一個數字并打印相應個數的空格; ???????? ?EMIT ? ??? ?從棧中彈出一個表示字符的數字并打印該字符; ?
記住堆棧的蹤跡:
"棧效應"蹤跡就是指一個詞在執行前棧中需要什么類型的數字,而執行后它又將是什么類型的數字反壓回堆棧。 把自己定義的詞連同它們的意義逐步匯集成表,那么其他人和自己以后都能容易的理解這些詞的操作。 ?FORTH 中這種表稱為"詞匯表"; ?大家習慣在詞匯表中使用特定的 棧標志法 。 (執行前-執行后) : 破折號是分隔符,前面的內容表示執行前當處于棧頂的內容,后面是執行后壓入棧頂的內容。 eg: ? . ? ?(n--) ? ? ? ? ? ? ? ? ? ? n表示一個數,表示執行前棧中要有一個數,執行后沒有數據要存入堆棧。 ? ? ? ? + (n1 n2 - sum) ? 表示 + 執行前棧中要有兩個數,執行完后還有一個數壓入棧中。
一些術語: 編譯(compile):由源文本生成計算機內存中的詞典條目。 詞典(Dictionary): 在FORTH中,包括"系統"定義(預定義)和"用戶"定義(自己定義)的各種詞的一個表。詞典以編譯形式固存在計算機內存。 執行(Execute):運行。所謂執行一個詞就是完成該詞已編譯定義所指定的所有操作。 擴展性(Extensibity):允許程序設計員加進新的特性,或者對已具有特性的計算機語言的特點進行修改。 詞匯表(Glossary):FORTH中已定義過的詞的表,標明它們的棧功能和功能解釋,以供程序設計員參考。 輸入流(Input stream):由文本解釋程序讀入文本。它可以是你在終端剛剛鍵入的文本,也可以是存貯在磁盤上的文本。 解釋(Interpret):(當相當于FORTH的文本解釋程序時)讀輸入流,然后到詞典中查對沒一個詞,若失敗,則轉換成數字。 后綴表示法(Postfix notation):把操作符書寫在他們的操作數字后邊的表示方法,如“2+5”寫成 “2 5 +”。也叫做 逆波蘭表示法(Reverse Polish Notation)。 堆棧(Stack):在FORTH中,數據按后進先出方式能被存貯或移走的內存區域。 堆棧上溢(Stack overflow):當作為堆棧的內存區域完全被數據充滿時所發生的錯誤。 堆棧下溢(Stack underflow):當操作符要求堆棧中數據但棧中已無合適的數據時所發生的錯誤。 詞(Word):在FORTH中一個定義的名字。
以后的筆記中不再在要輸入回車符的地方打 return
//筆記里面的return都表示輸入命令時候的換行 // '詞 '和 '數' 必須要用空格隔開,這樣FORTH才能識別,空格可以多個,但是必須有
| 15?SPACES return? | 打印15個空格 |
| 42 EMIT return? | 打印*,43是+;44,;45 -; |
| 15 SPACES 42 EMIT 42 EMIT return? | 組合命令,先打印15空格,然后再連續打印兩個* |
| : STAR 42 EMIT ; return | 自己定義詞組; : 表示定義,后面跟的是一個自己要定義的詞組的名稱;再后面的就是這個詞組要實現的功能;eg: STAR 命令實現輸出一個*號 |
| CR STAR CR STAR CR STAR return | CR 是系統詞典,表示換行;后面跟的是剛才定義的命令 |
| : STARS 0 DO STAR LOOP ; return? | 定義單詞STARS,表示做循環次STAR,次數會在命令開頭給出 |
| 5 STARS return | 執行5次STAR操作 |
| : MARGIN CR 30 SPACES ; return? | 定義,換行輸出30個空格 |
| : BLIP MARGIN STAR ; return? | 定義,換行輸出30個空格和一個*? |
| : BAR MARGIN 5 STARS ; return | 定義,換行輸出30個空格和5個*? |
| BAR BLIP BAR BLIP BLIP CR return | 輸出個F形狀 |
| : F BAR BLIP BAR BLIP BLIP CR ; return | 定義,輸出F |
詞典:FORTH的每個詞和它的定義都被登記在FORTH詞典中。FORTH把自己定義翻譯成詞典形式寫入詞典條目。這個過程叫做 ?"編譯"? 終端鍵入命令詞,會啟動 ?INTERPRET ?的詞,叫做 ??“文本解釋程序";
FORTH 程序中: 也是一個詞;
命名:
少數不能用來命名的詞: return:回車符,表示完成輸入; backspace:刪除符,表示要修改; space:空格,作為一個詞的結束;注意: n SPACE 用完會在棧中插入好多1,所以不要用SPACE,要就使用 SPACES 用完還會把事先壓入棧中要求顯示的空格數彈出來 ." ?:表示后面跟的是一個字符串; eg:??: GREET ?." ?HELLO , I SPEAK FORTH " ?; ? //這個標記要組合出現,不能空格隔開
堆棧:FORTH 運算符的操作場所
后綴表示法:
FORTH 語言采用的是后綴表示法,不是中綴表示法;目的是便于使所有需要數字的詞能從堆棧中取得他們。 eg: ? ?+ ? ? ? ? ? ? ?從棧中彈出兩個數字并把他們相加; ??????? ? . ? ? ? ? ? ? ? 從棧中彈出一個數字并打印它尾隨一個空格; ???????? ?SPACES ? 從棧中彈出一個數字并打印相應個數的空格; ???????? ?EMIT ? ??? ?從棧中彈出一個表示字符的數字并打印該字符; ?
| 定義一個總是把4和堆棧中的任意數相加的詞 | : FOUR-MORE 4 + ; return |
| 3 FOUR-MORE . return? -10 FOUR-MORE . return | |
| 在這種情況下,定義內部的“4”就仿佛它在定義外邊一樣被壓棧。然后 + 將棧中的兩個數字相加。 | 因為 + 總是對棧中的數字進行操作,所以它并不關心 “4” 是來自定義內部的 3 還是來自定義外部的。 |
記住堆棧的蹤跡:
"棧效應"蹤跡就是指一個詞在執行前棧中需要什么類型的數字,而執行后它又將是什么類型的數字反壓回堆棧。 把自己定義的詞連同它們的意義逐步匯集成表,那么其他人和自己以后都能容易的理解這些詞的操作。 ?FORTH 中這種表稱為"詞匯表"; ?大家習慣在詞匯表中使用特定的 棧標志法 。 (執行前-執行后) : 破折號是分隔符,前面的內容表示執行前當處于棧頂的內容,后面是執行后壓入棧頂的內容。 eg: ? . ? ?(n--) ? ? ? ? ? ? ? ? ? ? n表示一個數,表示執行前棧中要有一個數,執行后沒有數據要存入堆棧。 ? ? ? ? + (n1 n2 - sum) ? 表示 + 執行前棧中要有兩個數,執行完后還有一個數壓入棧中。
一些術語: 編譯(compile):由源文本生成計算機內存中的詞典條目。 詞典(Dictionary): 在FORTH中,包括"系統"定義(預定義)和"用戶"定義(自己定義)的各種詞的一個表。詞典以編譯形式固存在計算機內存。 執行(Execute):運行。所謂執行一個詞就是完成該詞已編譯定義所指定的所有操作。 擴展性(Extensibity):允許程序設計員加進新的特性,或者對已具有特性的計算機語言的特點進行修改。 詞匯表(Glossary):FORTH中已定義過的詞的表,標明它們的棧功能和功能解釋,以供程序設計員參考。 輸入流(Input stream):由文本解釋程序讀入文本。它可以是你在終端剛剛鍵入的文本,也可以是存貯在磁盤上的文本。 解釋(Interpret):(當相當于FORTH的文本解釋程序時)讀輸入流,然后到詞典中查對沒一個詞,若失敗,則轉換成數字。 后綴表示法(Postfix notation):把操作符書寫在他們的操作數字后邊的表示方法,如“2+5”寫成 “2 5 +”。也叫做 逆波蘭表示法(Reverse Polish Notation)。 堆棧(Stack):在FORTH中,數據按后進先出方式能被存貯或移走的內存區域。 堆棧上溢(Stack overflow):當作為堆棧的內存區域完全被數據充滿時所發生的錯誤。 堆棧下溢(Stack underflow):當操作符要求堆棧中數據但棧中已無合適的數據時所發生的錯誤。 詞(Word):在FORTH中一個定義的名字。
以后的筆記中不再在要輸入回車符的地方打 return
轉載于:https://www.cnblogs.com/meihao1203/p/6771478.html
總結
- 上一篇: 道法演讲之马云从事教育
- 下一篇: 要留住优秀员工,除了钱,你还可以用什么?