- WSOFT Docs
- ブログ
- 共同作成ガイド
-
製品
- 製品
- PCMX
- WSOFTアカウント
- AliceScript
- AliceScript
- 謝辞
- ダウンロード
- Alice(キャラクター)
- AliceScriptのツアー
- Wikiの概要
- APIブラウザー
- APIブラウザー
- Alice
- break
- continue
- delay
- do
- exit
- for
- foreach
- function
- if
- import
- include
- lock
- read
- return
- string_format
- switch
- using
- while
- write
- Diagnostics
- Environment
- env_clr_version
- env_commandLine
- env_commandLineArgs
- env_set_exitCode
- env_expand_environmentVariables
- env_get_environmentVariable
- env_hasShutdownStarted
- env_impl_architecture
- env_impl_location
- env_impl_name
- env_impl_target
- env_impl_version
- env_Is64BitOperatingSystem
- env_Is64BitProcess
- env_MachineName
- env_NewLine
- env_os_platform
- env_os_version
- env_set_environmentVariable
- Exception
- Interpreter
- gc_collect
- gc_collectAfterExecute
- gc_getTotalMemory
- interpreter_append_output
- interpreter_append_output
- interpreter_consts
- interpreter_namespaces
- interpreter_getVariable
- interpreter_globalVariables
- interpreter_name
- interpreter_nameexists
- interpreter_namespaces
- interpreter_process
- interpreter_processfile
- interpreter_reset_variables
- Type
- Math
- math_abs
- math_acos
- math_acosh
- math_atan
- math_atan2
- math_atanh
- math_bitdecrement
- math_bitincrement
- math_cbrt
- math_celling
- math_clamp
- math_copysign
- math_cos
- math_cosh
- math_e
- math_exp
- math_factorial
- math_floor
- math_fusedmultiplyadd
- math_isFinite
- math_isInfinity
- math_isNaN
- math_isNegativeInfinity
- math_isNormal
- math_isPositiveInfinity
- math_isprime
- math_isSubNormal
- math_max
- math_min
- math_pi
- math_pow
- math_round
- math_sin
- math_sinh
- math_sqrt
- math_tan
- math_tanh
- math_tau
- math_truncate
- Net
- Parsing
- Random
- Security
- Threading
- Array
- Bool
- Bytes
- Delegate
- None
- Number
- String
- string
- CompareTo
- Contains
- EndsWith
- Equals
- Format
- GetBytes
- Indent
- IndexOf
- Insert
- IsEmptyOrNull
- IsEmptyOrWhiteSpace
- IsNormalized
- Join
- LastIndexOf
- Normalize
- PadCenter
- PadLeft
- PadRight
- Remove
- RemoveAt
- Repeat
- Replace
- ReplaceLineEndings
- Split
- SplitLines
- StartsWith
- SubString
- ToLower
- ToLowerInvariant
- ToUpper
- ToUpperInvariant
- Trim
- Trim
- TrimStart
- Variable
- 変更履歴
- 例外
- 例外
- 0x000 NONE
- 0x001 COULDNT_FIND_FUNCTION
- 0x003 INVALID_OPERAND
- 0x004 COULDNT_FIND_VARIABLE
- 0x005 ITS_RESERVED_NAME
- 0x006 ILLEGAL_IDENTIFIER
- 0x009 INCOMPLETE_ARGUMENTS
- 0x01a COULDNT_ADD_PARAMETERS_AFTER_PARMS_KEYWORD
- 0x020 COULDNT_EXECUTE_BLOCK
- 0x021 NEED_BRACKETS
- 0x022 UNNEED_TO_BRACKETS
- 0x04a CASE_BLOCK_MISSING_BREAK
- 0x04b UNKNOWN_ESCAPE_CHAR
- 基本
- Alice in Discord
- 相互運用
- チュートリアル
- ダウンロードセンター
- ほめて.ws
- アイコンメーカー
- WSOFTScript
- Unidet
- WebSailing
- WSNET
- WSTodon
- WSTube
- Lantana
- 法的資料
-
あみうは
- あみうは
- 新学期が始まりました!
- 恋の相談
- プチコン3号で作ったのは?
- オススメの文庫
- マクドナルド最高!
- ios11β レビュー
- あみうはの歌について
- ついに自分のソフトウェアのホームページができました。
- Windowsタブレットをリセットして起動しなくなった人のために
- PCレスで YouTubeの曲を携帯mp3プレイヤーで聴く(iPhone)
- 食べられないラズベリーパイを買いました。(1)
- ラズベリーパイの下ごしらえ(2)
- 小説始めます~
- 女子がキュンとくる行動ベスト3!!
- MacとWindowsについてあまり知られていない事
- macでできる裏技
- ドコモの格安スマホ「MONO」買っちゃいました☆いい所をいくつか
- 『レビュー』iPhone6sを1年間使い続けて思ったこと
- iPhoneの拡大鏡に関するバクを発見しました。
- iPhoneで圧縮ファイルを作成したり解凍する方法
- Obscura2が今だけ無料!使い方まとめ
- Windowsタブレットがブルースクリーンになった時のメモ
- お知らせ
前処理指令
この記事では、AliceScriptにおける前処理指令(プリプロセッサディレクティブ)
AliceScriptはインタプリタ言語なので、Aliceの実装ごとに個別のプリプロセッサはありませんが、この記事で説明する前処理指令は多くのコンパイル式言語のそれと同じように処理されます。 これらを使用すると、インタプリタに設定を指示したり、シバンとして使用したり、条件付きパースを実行するなどに役立ちます。前処理指令はインタプリタにスクリプトが渡される前のパーサーで実行されます。 この機能はCやC++言語の前処理指令とは異なり、マクロを作成するために使用することはできません。この機能はAlice2.2以降で使用できます。
基本
前処理指令は、#
で始まり;
で終わるステートメントです。また、;
で終了する代わりに改行文字を終端として扱うこともできます。スクリプトの後端に記述することはできません。
さらに、指令には引数を付加できます。指令と引数は(空白文字)を使用して区切ります。
これは通常、次のような形式です。
また、パーサーが未知の指令に遭遇した場合でもエラーが発生することはありません。未知の指令は無視されます。
シバン
シバンとは、Unix環境でOSにスクリプトを実行するべき処理系を指定する機能のことを指します。 つまり、macOSとLinux環境ではシバンを持つスクリプトは実行権限を与えてやればあたかも実行ファイルかのように実行できるのです。 Aliceの実装でシバンに対する処理は実装されていません。また、未知の指令をパーサーが無視するのもこのためです。
スクリプトでシバンを定義するには次のように記述します。
これは次のように実行できます。
条件付きパース
次の前処理指令を使用して、パースする部分を制御できます。
#if
条件付きパースを開始します。コードは、指定されたシンボルが定義されている場合にのみパースされます。#else
前の部分を閉じ、前に指定されたシンボルが定義されていない場合は、コードをパースします。#endif
前の部分を閉じます。
次の例ではシンボルTEST
を指定しています。print("Hello,TEST");
は実行されますがprint("Hello,MAIN");
は実行されません。
次の例ではTEST
が定義されていない場合にのみ実行されます。
シンボルの定義
次の前処理指令を使用して、シンボルを定義します。シンボルは条件付きパースのほか、インタプリタの挙動を制御する時にも使用します。シンボルは大文字小文字を区別しません。
#define
シンボルを定義します。#undef
シンボルの定義を解除します。
#undef
#undef
を使用するとシンボルの定義が解除されます。これは、スクリプトがインタプリタに渡された時にはすでに定義を解除されているので、インタプリタに渡されることはありません。
インタプリタを制御するときは#undef
を使用しないでください。
Cとの違い
#define
を使用して、CやC++で行うような定数値を宣言することはできません。AliceScriptの定数はpublic const
の変数として定義できます。
シンボルを使用して、インタプリタの挙動を制御できます。どのようなシンボルを設定するとどのような挙動をするかについては次の表を参照してください。
シンボル | 挙動 |
---|---|
UNNEED_VAR |
変数の宣言が不要になります |
FOLLOW_INCLUDE |
自分のスクリプトでinclude したファイルにもシンボルを引継ぎます |
DISABLE_USING |
usingが使用できなくなります。 |
たとえば、現在のスクリプトで変数の宣言を不要にするには次のようにします。この方法を使用したからと言って未定義の変数が使用できるようになるわけではありません。
ファイルの挿入
#include
指令を使用して、ファイルを現在のスクリプトに挿入できます。include関数と異なる点は、現在のスクリプトの中にそのまま挿入しスクリプトに親子関係を発生させないことです。次に例を示します。
エラーの発生
#error
指令を使用して、ユーザー定義のエラーを起こすことができます。次に例を示します。
情報の出力
#print
指令を使用して、プログラムがパースされる前に情報を出力できます。次に例を示します。