跳轉到內容

Futurebasic/語言/語法

來自華夏公益教科書,自由的教學讀物

FB 語言介紹

[編輯 | 編輯原始碼]

一個 FB 程式由一系列語句和可選的語句標籤組成。通常你將每個語句寫在一行上;然而,也可以在一行上放置多個語句,反之,一個語句也可能跨越多行。

你可以在一行上編寫多個語句,方法是用冒號分隔每對語句,如以下示例所示

A = 7 * B : Print score(A) : Fn doSum(x)

如果一行以續行符結尾,該行上的(最後一個)語句將在下一行繼續。續行符看起來像這樣:¬,可以透過輸入 Option-L 來輸入。示例

myArray(numberDogs, numberCats, numberPorcupines) ¬ 
        = Fn createMenagerie(Mid$(animalName$(x), ¬ 
        nameOffset, 4), vetNumber) 

雖然你可以安全地在引號字串中插入換行符 [option-L],但在其他地方,最好只在語句之間插入換行符,並且絕對不要將其與塊語句混合使用。對於仍然使用行號的人來說,程式中的任何一行(除了緊接在續行符之後的行)都可以以行號開頭。

某些特殊語句標誌著“塊結構”的開始或結束。“塊結構”的開啟或關閉語句不應與同一行上的任何其他語句一起出現。這些語句包括以下內容

#If...  #Else... #EndIf 
Begin Enum... End Enum 
Begin Globals... End Globals 
Begin Record... End Record 
BeginAssem... EndAssem 
Compile Long If... Compile Xelse... Compile End If  
Dim Record... Dim End Record 
Do... Until 
EnterProc... ExitProc 
EnterProc%... ExitProc% 
For... Next 
Local Fn... End Fn 
Long Fn... End Fn 
Long If... Xelse...End If  
Select Case... End Select Case 
While... Wend

程式中的任何一行(除了緊接在續行符之後的行)都可以以行號開頭。行號必須是 1 到 65534 之間的整數,並且沒有兩行可以具有相同的數字。至少應有一個空格字元將行號與該行中的第一個語句分開。示例

140 Print "Hello": Beep 

行號對於標識程式中的特定位置很有用,例如作為 GotoGosub 等語句的目標。但是,行號被認為是一種過時的語法功能,因此一般不建議使用。

語句標籤

[編輯 | 編輯原始碼]

語句標籤是標識程式中特定位置的另一種方法。語句標籤必須單獨出現在一行上,並且同一個標籤不能在程式中出現多次。根據您的偏好設定,您可以透過以下方式表達語句標籤

雙引號內的字元字串。示例

"My First Label" 

一個非空格字元字串,後面跟著一個冒號。這種標籤只有在“允許 QuickBasic 標籤”首選項設定時才可用(請參閱編輯器手冊)。示例

Label17: 

與行號類似,如果程式包含 GotoGosub 等語句;或者如果您的程式使用 LineProc 函式,則語句標籤很有用。

請注意,當 QuickBASIC 標籤的首選項開啟時,FutureBASIC 語句在編譯器看來可能看起來像 QuickBASIC 標籤。示例

Print:Stop:Rem this won't work with QB labels On 

由於 QuickBASIC 標籤要求文字和冒號之間沒有空格,因此您可以按如下方式避免可能的錯誤

Print : Stop : Rem note the space before the colon 

可執行和不可執行語句

[編輯 | 編輯原始碼]

FB 中的每個語句都是可執行語句或不可執行語句。

可執行語句表示在程式執行時要執行的指令。當您執行程式時,給定的可執行語句可能會執行一次,或多次,或根本不執行,具體取決於程式條件。可執行語句執行的順序不一定與它們在程式中出現的順序相同。可執行語句的示例包括:PrintLetReadOpen

不可執行語句表示告訴 FB 編譯器如何構建程式的指令。它們幫助編譯器確定如何分配記憶體以及如何解釋和編譯程式中的其他語句。不可執行語句在程式中出現的順序很重要:當編譯器構建程式時,它會從上到下掃描所有語句,不可執行語句只能影響其下方出現的行的解釋。您無法透過將不可執行語句放在“條件執行”塊(如 Long If...End IfFor...Next)中來更改不可執行語句的效果。但是,您可以透過將不可執行語句放在 Compile Long If 塊中來有條件地將不可執行語句包含在程式中或從程式中排除。不可執行語句的示例包括:DimDataLocal FnDef Len

程式佈局和執行順序

[編輯 | 編輯原始碼]

程式的某些部分可能位於函式塊和過程塊內。函式和過程塊是語句塊,這些語句塊被以下語句對包圍

Local Fn...End Fn 
Long Fn...End Fn 
EnterProc...ExitProc 

位於所有函式和過程塊之外的語句被稱為屬於程式的“主”部分。“主”語句可以位於函式和過程塊之前,或者位於它們之後,或者兩者都有。

當您的程式執行時,“主”中出現的第一個可執行語句是實際執行的第一個語句。之後,執行順序取決於程式的具體情況:通常,語句按它們在“主”中出現的順序執行,但 Long IfGotoWhileFn <userFunction> 等語句可能會改變執行流程。函式塊和過程塊在使用 Fn <userFunction> 等語句顯式“呼叫”之前不會執行。程式在遇到 EndStop 語句時停止,或者在遇到“主”中的最後一個語句時停止。請注意,如果“主”中沒有可執行語句,那麼您的程式將不會執行任何操作。

識別符號

[編輯 | 編輯原始碼]

識別符號是您為程式中的某些內容命名的名稱。在 FB 中,識別符號用於命名以下型別的物件

  • 變數;
  • 陣列(見下文);
  • 使用者定義的函式(見 Local FnLong Fn 等語句);
  • 使用者定義的資料型別(見 #DefineBegin Record 語句);
  • 記錄欄位(見 Begin RecordDim 語句);
  • 符號常量(見“常量宣告”語句)。

在 FB 中,識別符號的長度可以達到 245 個字元。它必須以字母開頭;其後續字元可以是字母、數字和下劃線字元(_)的任意組合(符號常量名稱不應包含嵌入的下劃線)。表示變數、陣列和函式名的識別符號也可以後接“型別識別符號字尾”,它是一個 1 或 2 個字元的符號,用於指定專案的 資料型別(見附錄 C 以獲取型別識別符號字尾的列表)。識別符號“不區分大小寫”,因此識別符號 highscoreHighScore 都被識別為相同的識別符號。

您可以使用相同的識別符號來命名兩個不同的東西,只要上下文清楚地表明指的是哪個東西即可。例如,您的程式可能有一個名為BookList$的變數,以及一個名為BookList$的本地函式; FB 可以區分這兩個,因為對本地函式的引用在您的程式中始終以 Fn 關鍵字開頭。

變數可以被認為是“用於儲存資料的命名容器”。在 FB 中有多種方式來表示變數;有關更多資訊,請參見附錄 B。每個變數都與一個“資料型別”相關聯,該型別決定了變數所佔用的記憶體量以及如何解釋變數的值。FB 中預定義了許多資料型別;您還可以建立稱為記錄的使用者定義資料型別。有關更多資訊,請參見 附錄 B:變數

陣列是變數的集合,它們共享相同的名稱和相同的資料型別。集合中的每個變數稱為陣列元素;您的程式透過下標來區分一個元素與另一個元素,下標是在陣列名稱後面用括號括起來的數字。例如,如果 theAngle 是陣列的名稱,那麼 theAngle(3) 表示陣列中的一個元素,而 theAngle(4) 表示陣列中的另一個元素。

上面的例子說明了一個一維陣列。在二維陣列中,每個元素由一個唯一的下標有序對錶示。如果 Salary& 是一個二維陣列的名稱,那麼 Salary&(4,7) 表示陣列中的一個元素,而 Salary&(7,4) 表示陣列中的另一個元素。一個數組可以有多個維度;實際上,它可以高達 255 維。您使用 Dim 語句來宣告給定陣列有多少個維度,並指定可以分配給每個下標的最大值。

可以分配給下標的最小值始終為 0。

本手冊中使用的約定

[編輯 | 編輯原始碼]

在本手冊剩餘部分中出現的語法描述中,將應用以下約定

  • 斜體表示的專案是佔位符,應根據描述中指示進行替換;
  • 粗體表示的專案是您應該完全按照顯示的輸入的文字;
  • 普通非斜體文字表示的專案是您通常應該完全按照顯示的輸入的文字;但是,以下字元不應該輸入,但具有下面解釋的特殊含義
[ ] { } | … 
  • 用方括號 [ ] 括起來的專案是可選的;
  • 用花括號 { } 括起來並用豎線 | 分隔的專案表示一個列表,您應該從中選擇一項;
  • 用方括號 [ ] 括起來並用豎線 | 分隔的專案表示一個列表,您應該從中選擇一項或零項;
  • 省略號 (…) 表示前面的專案可以重複無限次。

示例:考慮以下語法描述模板

bob [, {bill | ron [, rick]}] 

此模板匹配以下每個模板

bob 
bob, bill 
bob, ron 
bob, ron, rick
華夏公益教科書