osdev-jpでは、OS開発に有用な情報を収集し公開しています
当初は 型 ( 値 )
を型変換として扱うつもりだったが、ポインタへの変換と間接演算子の区別が付かないことから、今は 値 @ 型
と書くことになっている。
uint ( 3 )
なら何も問題がなさそうだが、例えば * foo ( 3 )
となった場合に困る。
OpeLa は関数の定義を後ろに書くこともできるため、上記のコードを見た時点では foo
が型名なのか変数や関数なのかが分からない。
すると *
が foo(3)
という関数呼び出しの戻り値を参照外ししているのか、3
を *foo
というポインタ型へキャストしているのか判断できない。
構文解析の段階で AST の形そのものが曖昧になり大変辛い。
@
はその他の場所で使われない演算子なので、@
の後ろは必ず型名、と決めることができる。
そのおかげで文法の曖昧性がなくなる。