Kuinのコンパイルエラー一覧(非公式)

Last Modified: 2016/10/29 16:50:07.
Only available in Japanese text.
Kuin関連情報の個人的まとめに戻る


概要

Kuin 1.00で表示されたコンパイルエラーをまとめています。
非公式です。
リストアップされていないコンパイルエラーに出会った方は連絡いただけると幸いです。
※リストアップしておくことで、【非公式Kuin.exe】の完成度を高める効果を期待しています。:-)
Kuinは、くいなちゃん(@kuina_ch)が考案したプログラミング言語です。

ランタイムエラー一覧もあります。 → Kuinのランタイムエラー一覧(非公式)

目次

※分類はこのページの作者による推測です。Kuin作者に未確認。

番号 分類
E0000- コンパイル時の設定や環境に関係するエラー
E1000- 文法上の誤りがある場合のエラー
E2000- 文法以外の仕様上の誤りがある場合のエラー
E9000- Kuin.exeの完成度に起因するエラー
番号なし 通常のコーディングでは見られないようなエラー(?)

コンパイルエラー一覧

E0000 ~

番号 メッセージ エラーの例 修正例
E0000 コンパイルするソースコードが指定されていません。 .knファイルを指定してください。 ソースファイル欄が空欄。 ソースファイルを指定する。
E0001 不正なファイル形式です。 コンパイルするソースコードには正しい名前の.knファイルを指定してください。 指定したソースファイルの拡張子が .kn になっていない。
ファイル名に半角英数字とアンダーバー以外が使われている。
ファイル名の先頭が数字。
.knファイルを指定する。
半角英数字とアンダーバーのみで先頭に数字が来ないファイル名にする。
E0002 そのファイル名は標準ライブラリで使われています。 ソースファイル名には、標準ライブラリで使われていない名前を付けてください。 コンパイルするソースファイル名に Kuin.kn を指定。
E0003 ファイルが開けませんでした。 ファイルが存在し、開ける状態になっているか確認してください。 ・指定したソースファイルが存在しない。
・使われているライブラリが存在しない。
・Kuin.exeの置いてあるフォルダにStdフォルダが存在しない。
・存在するソースファイルを指定する。
・ライブラリのファイル名を正しく指定する。
・Kuinを正しくインストールする。
E0004
E0005 不正なアイコンファイル名です。 .icoファイルを正しく指定してください。
・アイコンファイル欄に指定したファイルが存在しない。
・.icoでない拡張子のファイル名を指定。
E0006 ファイルの書き込みに失敗しました。書き込み先のファイルが既にオープンされていないか確認してください。 ・出力する exeファイル が開かれている。
・出力する exeファイル が読み取り専用になっている。
・Rlsという名前のファイルが存在する状態でリリースコンパイル。
・実行中の exeファイル を閉じる。
・出力する exeファイルの[読み取り専用]属性を外す。
・Rlsという名前のファイルを削除orリネームしておく。
E0007 不正なアイコンファイル形式です。 正しいアイコンファイルかどうか確認してください。 指定した.icoファイルの中身が、icoファイル形式になっていない。
E0008 標準ライブラリが見つかりません。 ドキュメントを確認し、正しくインストールしてください。 Std\Kuin.knの _Init() の定義を削除した状態でコンパイル。 Stdフォルダ内のファイルは編集しないようにしましょう!
E0009 Kuinのシステムファイルが見つかりません。 ドキュメントを確認し、正しくインストールしてください。 KuinのインストールディレクトリにStd\Deploy\GBerry.kndがなく、ソースコードの置いてあるフォルダにData\GBerry.kndが存在しない状態でコンパイル Deployフォルダを削除・改変しないようにしましょう。
E0010

E1000 ~

番号 メッセージ エラーの例 修正例
E1000 構文エラーです。 正しい文法になっているか確認してください。
・行末に不要な「;(セミコロン)」
・class c()の括弧忘れ
・?(,)の ?と(の間にスペースを入れてしまっている。
・breakやcontinueの後にブロック名忘れ。
・その他
Kuinの構文をKuinの拡張バッカス・ナウア記法 (非公式)などで確認して修正してください。
E1002 クラスの定義が end class によって閉じられていません。 class C() class C()
end class
E1003 関数以外のクラス内要素は、オーバーライドできません。
func Main()
    class c()
        +var a
    end class
end func
func Main()
    class c()
        var a
    end class
end func
E1004 関数・変数以外のクラス内要素は、プライベートにできません。
func Main()
    class c()
        -const n: int :: 1
    end class
end func
func Main()
    class c()
        const n: int :: 1
    end class
end func
E1005 列挙体の定義が end enum 以外で閉じられています。
func Main()
    enum e
    end func
end func
func Main()
    enum e
    end enum
end func
E1006 列挙体の定義が end enum によって閉じられていません。 enum E enum E
end enum
E1007 不正な数値表現です。 正しい文法になっているか確認してください。 ・2#3
・1.ToStr()
※2進数は0か1しか使えません。
・1 .ToStr() {.の前に空白}
E1008 不正な基数です。 基数は10を除く2~36の値でなければなりません。 1#11 2#11
E1009 引数、グローバル変数、メンバ変数に初期値は指定できません。 var n: int :: 0
{※ローカルスコープであれば問題ありません}
E1010 定数の値が指定されていません。 const n: int const n: int :: 1
E1011 ブロック等の定義が end によって閉じられていません。 func Main() func Main()
end func
E1012 不明な文やブロックの定義です。
func Main()
    f() {doを忘れている}
    func f()
    end func
end func
func Main()
    do f()
    func f()
    end func
end func
E1013 ブロック等の定義と end が対応していません。 ブロックの開始はあるけれど終わりがない。
(ifブロックのend ifを忘れている。)
E1014 ifブロックの構文エラーです。 正しい文法になっているか確認してください。
func Main()
    if(true)
    else {elseが2つ以上ある}
    else
    end if
end func
func Main()
    if(true)
    elif(true)
    else
    end if
end func
E1015 ifブロック以外で elif が記述されました。
func Main()
    elif(true)
    end if
end func
func Main()
    if(true)
    end if
end func
E1016 ifブロック以外で else が記述されました。
func Main()
    ifdef(rls)
    else
    end ifdef
end func
func Main()
    ifdef(rls)
    end ifdef
    ifdef(dbg)
    end ifdef
end func
E1017 switchブロックの構文エラーです。 正しい文法になっているか確認してください。
func Main()
    switch(1)
        {switchの直後、case節の前に文がある}
        do Dbg@Log("switch")
    case(1)
    end switch
end func
func Main()
    {switchの手前に書けば問題なし}
    do Dbg@Log("switch")
    switch(1)
    case(1)
    end switch
end func
E1018 switchブロック以外で case が記述されました。
func Main()
    if (true)
    case
    end if
end func
func Main()
    if (true)
    else
    end if
end func
E1019 switchブロック以外で default が記述されました。
func Main()
    if (true)
    default
    end if
end func
func Main()
    if (true)
    else
    end if
end func
E1020 whileブロックの構文エラーです。 正しい文法になっているか確認してください。
func Main()
    while(true, true)
    end while
end func
func Main()
    while(true, skip)
    end while
end func
E1021 tryブロックの構文エラーです。 正しい文法になっているか確認してください。
func Main()
    try
    finally
    finally
    end try
end func
func Main()
    try
    finally
    end try
end func
E1022 tryブロック以外で catch が記述されました。
func Main()
    if(true)
    catch
    end if
end func
func Main()
    if(true)
    else
    end if
end func
E1023 tryブロック以外で finally が記述されました。
func Main()
    if(true)
    finally
    end if
end func
func Main()
    if(true)
    else
    end if
end func
E1024 ifdefの条件に dbg および rls 以外が指定されました。
func Main()
    ifdef(true)
    end ifdef
end func
func Main()
    ifdef(rls)
    end ifdef
end func
E1025 文字リテラルに空もしくは2文字以上は指定できません。 const a: char :: '' const a: char :: 'a'
E1026 括弧が ) で閉じられていません。
func Main()
    var a: int :: (1
    ) {途中の改行はNG}
end func
func Main()
    var a: int :: (1)
end func
E1027 コメントが } で閉じられていません。 {{ } ←コメントはネストされます。
{ "}" ←文字列中の}ではコメントは終了しません。
{{ }}
{ "}"}
E1028 文字および文字列リテラルの途中で改行してはなりません。 const str: []char :: "Hello World!!
" {途中の改行はNG}
コメント中に ' や "を単独で書いた場合もこのエラー。
const str: []char :: "Hello World!!"
E1029 長すぎる識別子です。 64文字を超える名前は付けられません。 const Looooo...ooooongNameNumber: int :: 1 識別子名を64字以内にする。
E1030 その識別子は予約語です。 予約語で定義されている名前は付けられません。 const block: int :: 4 const block_: int :: 4
E1031 その識別子は既に定義されています。 同じスコープ内で名前が重複してはなりません。 var n: int
var n: char
var n: int
var c: char
E1032 不正なエスケープシーケンスです。 const a: char :: '\0' const a: char :: 0 $char
{※おそらく、\n \t \" \' \\ \w 以外使えません}
E1033 全角スペースを使用してはなりません。 文字列中で使用したいときは \w を用いてください。 { } {コメント中でも全角スペースは使えないようです}
E1034 文字および文字列リテラル中にタブ文字を使用してはなりません。 \t を用いてください。
const str: []char :: "	"
const str: []char :: "\t"
E1035

E2000 ~

番号 メッセージ エラーの例 修正例
E2000 未定義の識別子です。 識別子が存在するか確認し、正しい名前を指定してください。
const Answer: int :: 42
func Main()
    {グローバル変数に@付け忘れ}
    do Dbg@Log(Answer.ToStr())
end func
const Answer: int :: 42
func Main()
    do Dbg@Log(@Answer.ToStr())
end func
E2001 Init関数の定義が間違っています。 func Init(cfg: Kuin@CCfg) としてください。 func Init()
end func
func Init(cfg: Kuin@CCfg)
end func
E2002 Main関数の定義が間違っています。 func Main() としてください。 func Main(): int
end func
func Main()
end func
E2003 Free関数の定義が間違っています。 func Free() としてください。 func Free(): int
end func
func Free()
end func
E2004 Err関数の定義が間違っています。 func Err(excpt: Kuin@CExcpt) としてください。 func Err()
end func
func Err(excpt: Kuin@CExcpt)
end func
E2005 自身のソースのグローバル要素を参照するときは、@ の前のソースファイル名を省略しなければなりません。
const N: int :: 1
func Main()
    do Dbg@Log(test@N.ToStr())
end func
const N: int :: 1
func Main()
    do Dbg@Log(@N.ToStr())
end func
E2006 他のソースのプライベートな要素を参照しました。
func Main()
    {_Init()は、Kuin.knで-funcで定義されています。}
    do Kuin@_Init()
end func
E2007 型が一致しません。 キャストなどを用いて正しい型に変換してください。

func Main()
    var n: int :: 1
    var f: float :: n
end func
{Kuinでは型が厳密に扱われます。}
func Main()
    var n: int :: 1
    var f: float :: n$ float
end func
(2016/03/21追記: class内で、同class内のメソッドを呼び出す際の【me.】忘れでもこのエラーが出ました。(Kuin ver1.01))
E2008 値が型の有効範囲外になりました。 演算結果がオーバーフローしていないかなど確認してください。
func Main()
    const n: int :: 9223372036854775808
    do Dbg@Log(n.ToStr())
end func
※intの範囲は、-9223372036854775808 ~ 9223372036854775807です。
(-2^63 ~ 2^63 - 1)
-16#8000000000000000 ~ 16#7fffffffffffffff
E2009 変数の初期値はコンパイル時に定数にできる必要があります。
func Main()
    var b: int :: 1
    const a: int :: b + 1
    do Dbg@Log(a.ToStr())
end func
func Main()
    const b: int :: 1
    const a: int :: b + 1
    do Dbg@Log(a.ToStr())
end func
E2010 不正な左辺値です。 代入式の左辺や:$演算子の両辺は、代入可能な変数でなければなりません。
func Main()

    do 1 :: 1
end func
func Main()
    var n: int
    do n :: 1
end func
E2011 参照先が存在しません。 正しいメンバ名が指定されているか確認してください。
func Main()
    do Dbg@Log('A'.Tostr())
end func
{whileのブロック名に代入した場合もこのエラー}
func Main()
    do Dbg@Log('A'.ToStr())
end func
E2012 関数でないものを関数呼び出ししようとしました。
func Main()
    do 1()


end func
func Main()
    do f()
    func f()
    end func
end func
E2013 引数の参照渡し指定が一致しません。 参照渡しするときは & を付ける必要があります。
func Main()
    var n: int
    do f(n)
    func f(x: &int)
    end func
end func
func Main()
    var n: int
    do f(&n)
    func f(x: &int)
    end func
end func
E2014 値を参照渡ししようとしました。 参照渡しできるのは変数だけです。
func Main()
    const n: int :: 0
    do f(&n)
    func f(x: &int)
    end func
end func
func Main()
    var n: int
    do f(&n)
    func f(x: &int)
    end func
end func
E2015 配列でないものを配列参照しようとしました。
func Main()
    var a: int
    do a[0] :: 1
end func
func Main()
    var a: int
    do a :: 1
end func
E2016 プライベートなメンバを参照しました。
func Main()
    class c()
        -var a: int
    end class
    do Dbg@Log((#c).a.ToStr())
end func
func Main()
    class c()
        var a: int
    end class
    do Dbg@Log((#c).a.ToStr())
end func
E2017 オーバーライドする親クラスのメンバが見つかりません。
func Main()
    class C1()


    end class
    class C2(C1)
        +func f()
        end func
    end class
    do (#C2).f()
end func
func Main()
    class C1()
        func f()
        end func
    end class
    class C2(C1)
        +func f()
        end func
    end class
    do (#C2).f()
end func
E2018 親クラスとメンバ名が重複しています。 オーバーライドする場合は + を付けてください。

func Main()
    class C()
        func Dtor()
            do Dbg@Log("Destructor is called.")
        end func
    end class
    var c: C :: #C
end func
{デストラクタはルートクラスであるKuin@CClassで定義済みなので、オーバーライドになります。}
func Main()
    class C()
        +func Dtor() {funcの手前に+でオーバーライド}
            do Dbg@Log("Destructor is called.")
        end func
    end class
    var c: C :: #C
end func
E2019 不正なオーバーライドです。 親クラスと定義が一致しているか確認してください。
func Main()
    class C1()
        func f()
        end func
    end class
    class C2(C1)
        -+func f() {継承元のf()には「-」がない}
        end func
    end class
    do (#C2).f()
end func
func Main()
    class C1()
        func f()
        end func
    end class
    class C2(C1)
        +func f() {引数や戻り値の型も一致}
        end func
    end class
    do (#C2).f()
end func
2016/03/21追記: 引数の識別子も統一する必要があるようです(Kuin 1.01)。ただし、引数の型は継承されている型なら多分OK。
E2020 クラスの継承が循環しています。
func Main()
    var c: C1 :: #C1
    class C1(C2)
    end class
    class C2(C1)
    end class
end func
E2021
E2022 列挙体の値が int型の有効範囲を超えました。
func Main()
    do Dbg@Log((e#a $int) .ToStr())
    enum e
        a :: 16#7fffffffffffffff
        b {このbの値がintの有効範囲を超えてしまう}
    end enum
end func
E2023 列挙体の値はコンパイル時に定数にできる int型の値でなければなりません。
func Main()
    var n: int :: 1
    enum e
        a :: n
    end enum
    do Dbg@Log((e#a$ int).ToStr())
end func
func Main()
    const n: int :: 1
    enum e
        a :: n
    end enum
    do Dbg@Log((e#a$ int).ToStr())
end func
E2024 列挙体の値が重複しています。
func Main()
    enum e
        a {enum要素の先頭の値は、省略時=>0}
        b :: 0
    end enum
    do Dbg@Log((e#a$ int).ToStr())
end func
func Main()
    enum e
        a :: -1
        b
    end enum
    do Dbg@Log((e#a$ int).ToStr())
end func
E2025 条件式は bool型でなければなりません。
func Main()
    assert 0
end func
func Main()
    assert false
end func
E2026 switchブロックで扱う値は、比較可能な型でなければなりません。
func Main()
    const str: []char :: null
    switch(str)
    case(null)
        do Dbg@Log("null!!")
    end switch
end func
func Main()
    var str: []char :: null
    switch s(str)
    default
        if(s =& null)
            do Dbg@Log("null!!")
        end if
    end switch
end func
E2027 caseの条件値はコンパイル時に定数にできる必要があります。
func Main()
    var n: int :: 1
    switch(1)
    case(n)
    end switch
end func
func Main()
    const n: int :: 1
    switch(1)
    case(n)
    end switch
end func
E2028 forブロックの初期値は int型でなければなりません。
func Main()
    for(0.5, 9)
    end for
end func
func Main()
    for(0, 9)
    end for
end func
E2029 forブロックの終値は int型でなければなりません。
func Main()
    for(0, 9.5)
    end for
end func
func Main()
    for(0, 9)
    end for
end func
E2030 forブロックの増減値は int型でなければなりません。
func Main()
    for(9, 0, false)
    end for
end func
func Main()
    for(9, 0, -1)
    end for
end func
E2031 forブロックの増減値はコンパイル時に定数に出来る必要があります。
func Main()
    var n: int :: 1
    for(9, 0, n)
    end for
end func
func Main()
    const n: int :: 1
    for(9, 0, n)
    end for
end func
E2032 forブロックの増減値は 0であってはなりません。
func Main()
    for(9, 0, 0)
    end for
end func
func Main()
    for(9, 0, -1)
    end for
end func
E2033 foreachブロックで扱えない型が指定されました。
func Main()
    foreach(0)
    end foreach
end func
{foreachブロックでは、配列やリストなどが扱えます。}
E2034 catchの条件値はコンパイル時に定数にできる int型の値でなければなりません。
func Main()
    var n: int :: 1
    try
    catch (n)
    end try
end func
func Main()
    const n: int :: 1
    try
    catch (n)
    end try
end func
E2035 throw文の例外コードは int型でなければなりません。
func Main()
    throw true
end func
func Main()
    throw 1
end func
E2036 throw文の例外メッセージは []char型でなければなりません。
func Main()
    throw 1, true
end func
func Main()
    throw 1, "Error 1"
end func
E2037 do文が副作用のない演算で終わりました。 do文で最後に行う演算は ::演算子や関数呼び出し等でなければなりません。
func Main()
    do 1
end func
E2038 break文にブロック以外が指定されました。
func Main()
    var a: int
    break a
end func
E2039 continue文にループブロック以外が指定されました。
func Main()
    while a()
        if b(true)
            continue b
        end if
    end while
end func
func Main()
    while a()
        if b(true)
            continue a
        end if
    end while
end func
E2040 型を指定すべきところに型以外が指定されました。
func Main()
    func f(n: n)
    end func
    do f(1)
end func
func Main()
    func f(n: int)
    end func
    do f(1)
end func
E2041

E9000 ~

番号 メッセージ エラーの例
E9998 現在のバージョンでは未実装の機能です。 次期リリースにご期待ください。
{2013/09/28時点でE9998になるコード}
{クラスの値比較}
func Main()
    class c()
    end class
    if(#c = #c)
    end if
end func

{2013/09/28時点でE9998になるコード}
{配列の値比較}
func Main()
    if(#[0]int = #[0]int)
    end if
end func

{2013/09/28時点でE9998になるコード}
{case条件に[]char以外の配列型}
func Main()
    class c()
    end class
    switch(#[0]int)
    case(#[0]int)
    end switch
end func
E9999 予期せぬエラーが発生しました。 コンパイラのバグである可能性が高いです。 開発者に問い合わせてください。
{2013/09/28時点でE9999になるコード}
{※意味解析までは問題ありません。}
{[コンパイル&実行]でエラーになります。}
{Kuin 1.01ではエラーになりません。}
func Main()
    var lStream: File@CLoadStream :: File@LoadFileStream("./test.txt")
    var buf: []byte8 :: lStream.Read(10) {E9999}
end func

{2013/09/28時点でE9999になるコード}
{Kuin 1.01ではエラーになりません。}
func Main()
    class c()
    end class
    switch(#c)
    case(#c)
    end switch
end func

{2016/03/29時点でE9999になるコード}
func Main()
	var a: c :: #c
	class c()
		var s: Snd@CSnd
	end class
end func

番号なし

該当の行番号も表示されず、解析が難しいのが特徴です。

メッセージ エラーの例
同じ名前のファイルまたはディレクトリが既に存在するため、"C:\~\Data" を作成できません。 Data という名前のファイルが存在する状態で[コンパイル&実行]。
※意味解析までは問題ありません。
同じ名前のファイルまたはディレクトリが既に存在するため、"C:\~\Res" を作成できません。 Res という名前のファイルが存在する状態で[リリースコンパイル]にチェックを入れて、[コンパイル&実行]。
※意味解析までは問題ありません。
同じ名前のファイルまたはディレクトリが既に存在するため、"C:\~\Save" を作成できません。 Save という名前のファイルが存在する状態で[リリースコンパイル]のチェックを外して、[コンパイル&実行]。
※意味解析までは問題ありません。
Error: インデックスが配列の境界外です。
2016/03/27調査中です。
2016/03/27追記: 以下のコードで発生します。(Kuin 1.01で発生。Kuin 1.00には存在しなかった不具合だと思います。)
func Main()
    var a: c :: (#c)
    class c()
        var f: func>()<
        func temp()
            do me.f()
        end func
    end class
end func

2016/03/27さらに追記: 引数が0個ではなく1個だとコンパイルできることがわかりました。
  以下のコードではコンパイル出来ます。
  実行も問題ありません。
func Main()
    var a: c :: (#c)
    class c()
        var f: func>(int)<
        func temp()
            do me.f(1)
        end func
    end class
end func
Error: オブジェクト参照がオブジェクト インスタンスに設定されていません。
func Main()
    do Snd@Load("test.ogg")
    {※ do LoadTex@Load("")など、オブジェクトを返す他の関数でも同様です。}
end func
Error: 型 'Kuin.CASTExpr1' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。
func Main()
    const a: int :: +a
    do Dbg@Log(a.ToStr())
end func
Error: 型 'Kuin.CASTExpr2' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。
func Main()
    const a: int :: a + a
    do Dbg@Log(a.ToStr())
end func
Error: 型 'Kuin.CASTExpr3' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。
func Main()
    const a: int :: a ?(1,1)
    do Dbg@Log(a.ToStr())
end func
Error: 型 'Kuin.CASTExprAs' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。
func Main()
    const a: int :: a$ int
    do Dbg@Log(a.ToStr())
end func
Error: 型 'Kuin.CASTExprCall' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。
func Main()
    const a: int :: a()
    do Dbg@Log(a.ToStr())
end func
Error: 型 'Kuin.CASTExprArray' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。
func Main()
    const a: int :: a[1]
    do Dbg@Log(a.ToStr())
end func
Error: 型 'Kuin.CASTExprDot' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。
func Main()
    const a: int :: a.a
    do Dbg@Log(a.ToStr())
end func
Error: 型 'Kuin.CASTExprRef' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。
func Main()
    const a: int :: a
    do Dbg@Log(a.ToStr())
end func
Error: 型 'Kuin.CASTExprValueArray' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。
func Main()
    const a: int :: [a]int
    do Dbg@Log(a.ToStr())
end func
Error: 型 'Kuin.CASTExprNewArray' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。
func Main()
    const a: int :: #[a]int
    do Dbg@Log(a.ToStr())
end func

その他

Kuin関連情報の個人的まとめに戻る

Copyright (C) Tatt(タット) ---- Twitterアカウント @tatt61880


Valid HTML 4.01 Strict Valid CSS!