编辑“︁
Whitespace
”︁(章节)
跳转到导航
跳转到搜索
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
==語法== 撰寫Whitespace程式時,使用者透過三種語法字元的排列去表達指令,進而操作虛擬機器中的堆疊與堆積。這些指令皆分為三個部分:IMP、指令和參數。IMP決定接下來要使用的指令是哪一種類型,指令決定執行的具體工作,而部分指令需要額外的參數<ref name=":0" />。 ===IMP=== IMP(Instruction Modification Parameter)是Whitespace語法中的一種特色,在每個指令前要先指定IMP,接著再選擇IMP中的個別指令。 {| class="wikitable" |- ! IMP !! 意義 |- | [Space] ||堆疊操作 |- | [Tab][Space] || 數學運算 |- | [Tab][Tab] || 堆積存取 |- | [LF] || 流程控制 |- | [Tab][LF] || I/O |} ===數字=== 在Whitespace中,許多指令都需要在最後加上一個整數作為參數。整數由一串不限長度的字元表示,格式為: * 第一個字元表示數字的正負,空白為「正」而製表符為「負」。 * 之後的字元以二進位表示數字,空白代表數位上的「0」,製表符則代表「1」。 * 數字結束時,須以換行標示。 ===堆疊操作=== 堆疊操作指令的IMP是[Space],因為是一種常用的指令,所以有最簡短的IMP。 這裡有四種操作方式。 {| class="wikitable" |- ! 指令 !! 參數!!意義 |- |[Space]|| 數字||將某個數字放入堆疊 |- |[Tab][Space]||數字||將堆疊裡的第n個元素複製到堆疊頂 |- |[Tab][LF]||數字||將堆疊裡的第n個元素從堆疊裡移除 |- |[LF][Space] ||- ||複製堆疊最上方的元素 |- |[LF][Tab] || - ||交換兩個堆疊最上層的元素 |- |[LF][LF] || -||屏棄堆疊最上層的元素 |} ===算術=== 算術指令的IMP是[Tab][Space],會取堆疊最上方的兩個元素做運算,並以運算結果取代原本的元素。 先進入堆疊的元素將被視為運算子左方的運算元。 {| class="wikitable" |- ! 指令 !! 參數!!意義 |- |[Space][Space]|| - ||加 |- |[Space][Tab]|| - || 減 |- |[Space][LF]|| -|| 乘 |- |[Tab][Space]|| -|| 整數除法 |- |[Tab][Tab]|| -|| 模運算(取餘數) |} ===堆積操作=== 堆積操作指令的IMP是[Tab][Tab],可以將物件存入堆疊中的特定地址,也可以取得堆疊中的特定地址的物件。 要儲存一個物件至堆積裡,先將位址放入堆疊,而後放入物件的值再執行儲存指令。 要取出堆積裡的一個物件,將位址放入堆疊而後執行取回指令,取回的值會被存放在堆疊的最上方。 {| class="wikitable" |- ! 指令 !! 參數!!意義 |- |[Space] ||-|| 儲存 |- |[Tab] ||-|| 取回 |} ===控制流程=== 控制流程指令的IMP是[LF]。子程序可以用標籤(label)作標記,進行有條件或無條件的跳轉,可用於實作條件判斷或迴圈等複雜構造。標籤是一個整數,由指令的參數欄輸入,所有標籤必須是獨一無二的,不能重複。 這一類指令也包含了「結束」。所有程式都必須藉由[LF][LF][LF]這條指令才能讓直譯器正確地結束程式。 {| class="wikitable" |- ! 指令 !! 參數!!意義 |- |[Space][Space]||標籤|| 標記程式中某一個流程 |- |[Space][Tab] ||標籤|| 標籤呼叫子程序 |- |[Space][LF] ||標籤|| 從某標籤無條件跳躍至另一標籤 |- |[Tab][Space] ||標籤|| 如果堆疊頂為0則跳躍至某標籤 |- |[Tab][Tab] ||標籤|| 如果堆疊頂為負數則跳躍至某標籤 |- |[Tab][LF] ||-|| 結束目前子程序並跳躍回呼叫者 |- |[LF][LF] ||-|| 結束程式 |} ===輸入與輸出=== 輸入與輸出指令的IMP是[Tab][LF],可以進行資料流的輸入輸出。 輸入指令會取用堆疊最上方的數字作為地址,將輸入的物件存入堆積。輸出指令可輸出堆疊最上端的數字,或輸出堆疊最上端的數字所對應的[[ASCII]]字元 {| class="wikitable" |- ! 指令 !! 參數!!意義 |- |[Space][Space] ||-|| 輸出堆疊最上方的字元 |- |[Space][Tab] ||-|| 輸出堆疊最上方的數字 |- |[Tab][Space] ||-|| 讀入一字元並寫入堆疊頂的位址裡 |- |[Tab][Tab] ||-|| 讀入一數字並寫入堆疊頂的位址裡 |}
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息