Vlrfsasm講習/文法

概要

本章では、Vlrfsasmの文法について解説します。

前章の内容について

前章の最後で「Hello world!」を出力しましたが、実のところあれはかなり高度な内容を含むので、解説は後の章で行います。

Vlrfsasmでは、データのことを「値」と呼びます。

値の実体

値は、順序と方向をもつ1次元のビット列で表現されます。値には、型などの情報を分けて付加することはできません。全てこのビット列に埋めこむ必要があるので、利用する構造体には、判別できる情報を予め加えましょう。

値の幅

値に含まれるビットの数を、「幅」と言います。「長さ」や「大きさ」も、Vlrfsasmにおいては同義語です。値は、0以上524288以下の個数のビットを含むことができますが、この範囲外の幅をもつ値は処理できず、エラーとなります。なお、この上限は、65536バイトや64KBとも言い換えられます。

構文

ほとんどのプログラミング言語には文字があり、その並べ方が規定されています。Vlrfsasmにおいても、いくらかの決まりがありますが、プログラミング言語では標準的なものが多く、簡単に理解できると思います。

文字

Vlrfsasmでは、Unicodeの全ての文字を許容していますが、特別な意味をもつものはASCIIの範囲のみです。

Vlrfsasmで特別な意味を持つ字COPIED!
  1. "$%()0123456789@[]{}

これ以外の文字、例えばZ_σなどは自由に使って構いません。しかし、特に日本語の設定での入力中は、全角スペースを避けましょう。Vlrfsasmはこれと半角スペースとを区別しますが、見た目にはわからないので、バグを生みます。

どんな言語でも、1字では意味を全て区別できません。いくつかの字をまとめ、単語として解釈することになります。英語ならスペースで区切れば単語を切り出せます。Vlrfsasmにおいても、区切り文字と括弧、文字列リテラル標識とコメント標識で単語を分けます。前節の文字一覧を参照してください。また、英語であれば記号.?は単語として認められませんが、Vlrfsasmでは認めます。そこで、Vlrfsasmでは、これらの意味のまとまりのことを「符」と呼ぶことにしています。

符はスペースや改行、かっこによって区切られます。

コメント

動くプログラムと読みやすいプログラムは違います。他の人が読む場合、あるいは未来の自分が読む場合を考えて、簡単なメモを残しておくと、生産性がとても上がります。もちろん、プログラム中に突然、日本語や英語で書くわけにはいきません。Vlrfsasmはこのための「コメント」という機能を持っています。コメント開始標識[からコメント終了標識]までは、符として解釈されません。

リテラル

Vlrfsasmはデータを変換して出力するプログラムです。変換対象のデータを入力する方法は2つあります。一方がソースファイル内に記述するもので、リテラルと呼ばれます。もう一方の生ファイルについては、後の章で説明します。

数値リテラル

リテラルはさらに2種類に分けられます。片方は数値をそのまま記述する「数値リテラル」です。Vlrfsasmのコード中で、数字または後述の基数接頭辞から始まる単語は、数値リテラルとして認識されます。

数値リテラルの始めの文字COPIED!
  1. 0123456789$%

数値リテラルによる値の幅は、リテラルの桁数などに関わらず、64ビットになります。これを超える長さの値を表したいときは、後述の結合関数や、生ファイルを使うことになります。

数値リテラルの途中には、-_のような記号を含めることができます。長いリテラルの桁区切りに活用しましょう。

基数接頭辞

数値リテラルでは、以下のように3種類の基数が使えます。

接頭辞と基数
基数記数法接頭辞例1例2
2二進法%%1011%01001110
10十進法なし1178
16十六進法$$B$4E

どの表記でも、値は等しいので、記述時にわかりやすいもので書きましょう。

なお、負の数を表す接頭辞はありません。正の数を書いてから符号を反転させます。

文字列リテラル

ご存知の通り、文字列はビット列です。Vlrfsasmでは、文字コードをUnicodeに統一しており、符号化方式はUTF-16BEを標準として他の形式との変換機能を提供します。リテラルのもう一方はこの文字列で、やはりUTF-16BEのビット列として扱われます。幅は1文字につき16ビットで、サロゲートペアがあれば32ビットです。

文字列リテラルは、文字列を二重引用符"で囲うことで表します。例えば、"文字列A"は、幅が64ビットですから、$6587-5B57-5217-0041と書くのと同じことです。

エスケープシーケンス

さて、文字列は二重引用符で囲むと書きましたが、二重引用符を文字列に入れたい場合はどうすればよいのでしょうか。このとき、特殊な表記を用います。記号\に続く文字に、通常と異なる意味を持たせるのです。この記号には、バックスラッシュや円記号など、環境によって様々な表示揺れがあります。Vlrfsasmの作者は、これを文字コードの数値から「5C」と呼んでいます。

エスケープシーケンス
表記解釈値
"\r"$000D
"\n"$000A
"\""$0022
"\\"$005C

これらは見た目上2字ですが、16ビットの値になります。

なお、文字列リテラルが複数行に渡る場合、改行コードは"\r\n"、つまり32ビットの値$000D000Aになります。