トークンは必ずホワイトスペースでばらさないいけない.最初はほぼ間違いなくこれに関するミスをやらかします.

compile hello.cpp;

上の場合 "hello.cpp;" を1つのトークンとして処理しようとします.
2重引用符で囲まれた文字列はホワイトスペースで区切られていても,1つのトークンとして扱われます.

a = "Hello world!" ; # a に "Hello world!" を代入.

(ホワイトスペースで区切られていても1トークンとして扱われる例外のもう1つに actions 中で指定するコマンドがありますが, primitive なことをしようとしない限りは知る必要がないので省略.)
\ は1文字の空白,2重引用符,\ 自身のためのエスケープ文字として使われる.

a = \"\ \\\" ; # a に "" \"" を代入

Jam (Boost.Build) の予約語を普通の文字列として扱う場合も2重引用符で囲む必要あり.

a = "return" ; # a に "return" (Jam の予約語)を代入

ルール

bjam での「ルール」というのはおおよそだいたい関数です.ルールの宣言について簡単に説明.ルールの宣言は以下のようになります.

rule hoge ( arg1 : arg2 + : arg3 * : arg4 ? )
{
  .....
}

コロンは引数の区切りを表します.仮引数の後ろにある記号は各々, + は1つ以上のトークン, * は0以上のトークン, ? は0または1つのトークンを受ける,という意味です.
ルールの呼び出しについて簡単に説明.ルールの呼び出しは,ルールの戻り値を使わない場合は以下のようになります.

hoge aaa : bbb ccc : : ddd ;

上の arg1 に "aaa", arg2 に "bbb" "ccc",arg3 は空, arg4 に "ddd" がそれぞれ代入されて hoge が呼び出されます.
ルールの戻り値を使う(値に代入したり,他のルールの引数にする)場合には,呼び出しを[]で囲う必要があります.

a = [ hoge aaa : bbb ccc : : ddd ] ; # hoge の戻り値を a に代入

何度も書きますが,トークンの前後の空白は必須のものです.
末尾のオプション引数は省略できます.

a = [ hoge aaa : bbb ccc ] ; # arg3 と arg4 を空で hoge を呼び出し

宣言に合致しない呼び出しは当然エラーとなります.

hoge aaa : : bbb : ccc : ddd ; # + が指定された第2引数を省略しているのでエラー

制御フロー文

for
文の終端はセミコロンで明示します.# から行末まではコメントとして無視されます.
変数の参照は $() で行えます.

x = aaa ;
echo $(x) ; # "aaa" と表示される

?= という代入文で「もし左辺が空ならば代入」というのも可能.

y ?= aaa ; # y が空なので "aaa" が代入される
y ?= bbb ; # y にはすでに空でない値が代入されているのでこの代入は意味を持たない