osdev-jpでは、OS開発に有用な情報を収集し公開しています

View My GitHub Profile

OpeLa の型変換文法の設計意図

OpeLa 言語仕様

現在の型変換の文法

当初は 型 ( 値 ) を型変換として扱うつもりだったが、ポインタへの変換と間接演算子の区別が付かないことから、今は 値 @ 型 と書くことになっている。

型 ( 値 ) ではなぜダメか

uint ( 3 ) なら何も問題がなさそうだが、例えば * foo ( 3 ) となった場合に困る。 OpeLa は関数の定義を後ろに書くこともできるため、上記のコードを見た時点では foo が型名なのか変数や関数なのかが分からない。

すると *foo(3) という関数呼び出しの戻り値を参照外ししているのか、3*foo というポインタ型へキャストしているのか判断できない。 構文解析の段階で AST の形そのものが曖昧になり大変辛い。

値 @ 型 だとなぜ嬉しいか

@ はその他の場所で使われない演算子なので、@ の後ろは必ず型名、と決めることができる。 そのおかげで文法の曖昧性がなくなる。