はじめに
ひらがなプログラミング言語あいな(Aina)は、制御構文の開始シンボルとして◇、〇、□、・などの全角記号を用い、箇条書きされた日本文としての体裁を日本語プログラミング言語あおい(Aoi)およびいずみ(Izumi)と共有します。◇は分岐、〇はループの開始と終了を表します。
日本語話者の児童が、幼児語を含む日常的な表現で意図を伝え、AIの支援を受けてあいな構文へ変換する利用を想定します。生成されたコードを読み返して意味を確かめることや、構文を理解した児童が自分で入力・修正することも妨げません。
本仕様の確定は、コンパイラの実装完了や適合試験の完了を意味しません。本仕様は次バージョンで変更される場合があり、同一バージョン内で補足される場合もあります。
概要と対象範囲
あいなはオープンな実装言語仕様であり、コンソールアプリケーションの実行コードを生成するコンパイラ言語です1。ロジックの検証とコンソール出力を主な対象とし、任意のターゲット言語ライブラリの利用はサポートしません。
実行環境・生成物
- 生成先はC#、対象は.NET 10、Windows x64とします。
- Windows向けの自己完結型・単一ファイル発行を行い、配布する成果物は指定名の
.exeとします。生成物の実行に別途.NETランタイムは不要です。 - コンパイル環境には、生成に使用する.NET 10 SDKを必要とします。実装は対応するSDKのバージョンと導入方法を明記します。
- ネイティブ依存物も単一ファイルへ同梱します。実行時に一時展開が必要な場合、実装の説明に展開先と必要な書き込み権限を明記し、展開失敗を診断します。
- PDBや中間ファイルは配布必須にしません。SDKを導入していない対象環境で、生成した実行ファイルの起動を適合試験で確認します。
Lv1.1の対象外
インポート構文、任意の外部ライブラリ呼び出し、JavaDoc形式のコメントによる英字名指定、あおいへのトランスコンパイル、C#以外の生成先、DLL生成、SQL実行は対象外です。
関数のオーバーロード、利用者定義コンストラクタ、引数付きインスタンス生成、静的メンバー、アクセス修飾子、オーバーライド、メンバーの隠蔽、空参照リテラルも対象外です。対象外の構文や演算を、C#の記法としてそのまま受理しません。
コマンドライン仕様
aina sourceFile targetFile [-c c]
-
sourceFileは入力ファイル名で、拡張子は.anaとします。 -
targetFileは拡張子を付けない出力ファイル名で、.exeを付加します。 -
-c cはC#を指定します。省略時もC#を選択します。 - オプションとその値の英字は大文字・小文字を区別しません。
-
-cc、未知のオプション、未対応の生成先、引数不足・過多は、使い方を示してエラーとします。 - 出力ディレクトリが存在しない場合は作成します。入力や出力にアクセスできない場合もエラーを報告します。
- 出力ファイルが既存の場合は上書きせずエラーとします。コンパイル失敗時も、既存の成果物は削除しません。
- CLI、ファイル名、本文のC#対応説明には、ソースコードの文字種制限を適用しません。
言語仕様
使用可能文字種
以下は、ソースコードの構文に使用する文字、および「ひらがな入力パネル」の入力候補です。入力パネルは本仕様の一覧に合わせます。文字列とコメントの内容は、後述のとおり別扱いとします。
入力モードは、ひらがな・カタカナ・数字・記号とします。モードと文字グループの選択は候補を切り替える操作であり、それ自体は文字を挿入しません。数字は数字ボタンで、他のモードはグループ選択後の候補ボタンで入力します。
ひらがな
| 行 | 入力できる文字 |
|---|---|
| あ行 | あ、い、う、え、お、ぁ、ぃ、ぅ、ぇ、ぉ |
| か行 | か、き、く、け、こ、が、ぎ、ぐ、げ、ご |
| さ行 | さ、し、す、せ、そ、ざ、じ、ず、ぜ、ぞ |
| た行 | た、ち、つ、て、と、だ、ぢ、づ、で、ど、っ |
| な行 | な、に、ぬ、ね、の |
| は行 | は、ひ、ふ、へ、ほ、ば、び、ぶ、べ、ぼ、ぱ、ぴ、ぷ、ぺ、ぽ |
| ま行 | ま、み、む、め、も |
| や行 | や、ゆ、よ、ゃ、ゅ、ょ |
| ら行 | ら、り、る、れ、ろ |
| わ行 | わ、ゐ、ゑ、を、ん |
は行は濁音・半濁音も入力候補とします。
カタカナ
| 行 | 入力できる文字 |
|---|---|
| ア行 | ア、イ、ウ、エ、オ、ァ、ィ、ゥ、ェ、ォ |
| カ行 | カ、キ、ク、ケ、コ、ガ、ギ、グ、ゲ、ゴ |
| サ行 | サ、シ、ス、セ、ソ、ザ、ジ、ズ、ゼ、ゾ |
| タ行 | タ、チ、ツ、テ、ト、ダ、ヂ、ヅ、デ、ド、ッ |
| ナ行 | ナ、ニ、ヌ、ネ、ノ |
| ハ行 | ハ、ヒ、フ、ヘ、ホ、バ、ビ、ブ、ベ、ボ、パ、ピ、プ、ペ、ポ |
| マ行 | マ、ミ、ム、メ、モ |
| ヤ行 | ヤ、ユ、ヨ、ャ、ュ、ョ |
| ラ行 | ラ、リ、ル、レ、ロ |
| ワ行 | ワ、ヰ、ヱ、ヲ、ン |
全角数字
1 2 3 4 5 6 7 8 9 0
記号
▽ △ □ ◇ 〇 ・ ( ) 「 」 。 、 . , = + - × ÷ > < : / * ー
ピリオド「.」とカンマ「,」は全角文字です。ループ記号は「〇」を使用します。長音符「ー」と減算記号「-」は別の文字として扱います。候補にあることは、任意の位置で構文として使用できることを意味しません。
エンコード・正規化・文字列とコメントの内容
- ソースはUTF-8で読み取り、ファイル先頭のBOMの有無を問いません。不正なUTF-8はエラーとします。
- LFとCRLFの両方を改行として受理します。
- 識別子はUnicodeのNFCで正規化してから許可文字と名前の一致を判定します。分解された濁音・半濁音は、合成済み文字と同じ名前として扱います。
- 全角・半角の違いを失うNFKCは使用しません。
- 文字列とコメントの内容には、漢字・英数字などのUnicode文字を許可します。内容は正規化せず保持します。ただし文字列の改行禁止や、引用符・コメント終端の規則は適用します。
空白・行・識別子
半角空白・全角空白・タブは、文字列とコメントの外では同じ区切りとして扱います。連続する空白は1つの区切りとします。インデントは読みやすさのためのもので、ブロックの範囲を決めません。空行は無視し、宣言・文・ブロック境界はそれぞれ1行に記述します。
変数名・定数名・関数名・クラス名は、上記のひらがな・カタカナ・長音符からなる1文字以上の名前とします。空白や構文記号は含められません。ひらがなとカタカナは区別し、同じスコープでの同名宣言を禁止します。
別のローカルスコープで同じ名前を宣言することは許可します。名前は参照位置から最も内側のスコープの宣言を解決します。同一スコープの重複禁止や、継承メンバーの同名再宣言禁止は別途適用します。
予約される語・名前は次のとおりです。これら全体と一致する名前を利用者定義名に使用できません。予約語を一部に含むだけの名前は禁止しません。
| 用途 | 予約される語・名前 |
|---|---|
| 基本型・定数型表記 | かず、もじ、はいといいえ、きまったかず、きまったもじ、きまったはいといいえ |
| 真偽値 | はい、いいえ |
| 宣言・生成 | クラス、くらす、あたらしい |
| 返却・ループ制御 | かえす、やめる、さきっぽへ |
| 分岐・ループ境界 | のとき、ほかに、ここまで、くりかえす、のときはくりかえす |
| 論理演算 | かつ、または、でない |
| 呼び出しの助詞 | を、で |
| 組み込み関数 | うつす |
区切り文字・標準表記
関数・メソッドの宣言と呼び出しの引数、およびカウンタ形式のループの各部分は、読点「、」または全角カンマ「,」で区切ります。両者は同義の区切りトークンです。同じ列の中で混在しても受理し、混在だけを理由にエラーや警告を出しません。半角カンマは受理しません。
AIが生成するあいなソース、教材の例、整形機能の出力は、読点「、」を標準表記とします。入力パネルでも読点を推奨表示とし、全角カンマも選択可能にします。
□(なまえ、とくべつなくぶん)を おぼえる
□(なまえ,とくべつなくぶん)を おぼえる
上記は同じ呼び出しを表します。区切りの統一は構文トークンに限り、文字列・コメントは置換しません。「りんご,みかん」 は、その内容を保持する1つの文字列です。ファイル全体の一括置換は行わず、元のソース位置を保持して診断します。
将来、引数付き生成を導入する場合も同じ区切り規則を適用しますが、Lv1.1で引数付き生成を有効にするものではありません。
型・リテラル
| 型名 | 値と生成先の対応 |
|---|---|
| かず | C#の int に対応する32ビット符号付き整数 |
| もじ | 文字列。空参照を値として持たない |
| はいといいえ | 「はい」または「いいえ」。C#の bool に対応 |
| 利用者定義クラス名 | そのクラスのインスタンスへの参照 |
「かず」の値域は-2147483648から2147483647までです。数字は全角を使い、負数は「-」を前置します。最小値を表す負数も正しく受理します。範囲外のリテラル・定数式はコンパイルエラーとします。
文字列は 「 と 」 で囲み、「」 は空文字列です。文字列中の改行は認めません。引用符そのものを含む文字列やエスケープ記法はLv1.1では定義せず、対応機能としません。
真偽値は「はい」「いいえ」のいずれか1つを書きます。はい (いいえ) のような選択肢併記は構文ではありません。
空参照を表す値・リテラルは導入しません。「もじ」の値なし表現は空文字列とし、空参照とは区別します。
型検査
代入・関数の引数・戻り値は宣言型との完全一致を必要とします。異なる型の暗黙変換、整数・真偽値の暗黙文字列化、派生型から基底型への暗黙変換も行いません。クラス型を引数・戻り値として使う場合は、同じインスタンスへの参照を渡します。
変数
・かず とし = 34
・もじ なまえ = 「はなこ」
・はいといいえ とくべつなくぶん = はい
中点「・」に続けて型名を書き、空白を挟んで変数名を書きます。「= 式」で初期値を指定できます。ローカル変数は初期値を省略できますが、参照する前に必ず値を代入します。代入前参照はコンパイルエラーとします。
宣言後の代入は「□代入先 = 式」とします。
・かず とし
□とし = 34
□とし = とし+1
初期値のないフィールドは、「かず」を0、「もじ」を空文字列、「はいといいえ」を「いいえ」とします。クラス型フィールドは明示的な初期化を必須とします。
定数
・きまったかず とし = 34
・きまったもじ なまえ = 「はなこ」
・きまったはいといいえ つかえる = いいえ
中点に続けて「きまった」と基本型名を書き、空白を挟んで定数名を書きます。初期値は必須で、コンパイル時に値が決まる式に限定します。定数への再代入、型不一致、範囲外の定数式はコンパイルエラーとします。
四則演算・比較・論理演算
一般的な中置記法を用い、次の演算を受理します。代入の「=」と等値比較の「==」は別です。複数文字からなる演算子の途中に空白を挟みません。
| 優先順位(高い順) | 演算・記法 | 型・結合規則 |
|---|---|---|
| 1 | 全角括弧「(式)」 | 式をグループ化 |
| 2 | 単項の「+」「-」、「でない 式」 | 符号は整数、否定は真偽値。右結合 |
| 3 | 「×」「÷」 | 整数同士。左結合 |
| 4 | 「+」「-」 | 整数同士の加減算。「+」は文字列同士の連結にも使用。左結合 |
| 5 | 「>」「<」「>=」「<=」 | 整数同士の大小比較 |
| 6 | 「==」 | 同じ型の整数・真偽値・文字列の等値比較 |
| 7 | 「式 かつ 式」 | 真偽値同士の論理積。左結合 |
| 8 | 「式 または 式」 | 真偽値同士の論理和。左結合 |
比較演算子の連続は認めません。文字列の等値は、正規化しない保持された文字列を序数比較します。文字列と整数の「+」やクラス参照の等値比較は対応しません。
「かつ」「または」「でない」と隣接する式の間には空白が必要です。「かつ」は左辺が「いいえ」、「または」は左辺が「はい」の場合、右辺を評価しません。不等比較専用の記号は導入せず、等値比較の否定を用います。
・かず あたい = 3
・はいといいえ つかえる = あたい > 0 かつ あたい < 10
・はいといいえ ゼロでない = でない (あたい == 0)
・もじ あいさつ = 「こんにちは」+「はなこ」
整数演算のエラー
加減乗算、単項符号、更新、除算を含む整数演算でオーバーフローが発生した場合は、実行時エラーを報告して終了します。値を黙って折り返しません。定数式で判明する場合はコンパイルエラーとします。
整数除算は0方向へ切り捨てます。ゼロ除算は実行時エラーとし、定数式で判明するゼロ除算はコンパイルエラーとします。整数の最小値を-1で割る場合はオーバーフローです。
関数
宣言
▽かず たす(かず ひとつめ、かず ふたつめ)
□(ひとつめ+ふたつめ)を かえす
△
▽あいさつする(もじ なまえ)
□(「こんにちは」+なまえ)を うつす
△
「▽」で宣言を開始し、「△」で終了します。値を返す関数は戻り値型と空白に続けて関数名を書きます。値を返さない関数は戻り値型を書きません。
引数は全角括弧で囲み、「型名 空白 引数名」を区切り文字で並べます。読点が標準表記で、全角カンマも同義です。引数がなくても「()」を書きます。
呼び出し
・かず こたえ
□こたえ = たす(1、2)
□(「はなこ」)を あいさつする
値を返す関数は「□代入先 = 関数名(引数)」で呼び出します。値を返す関数・メソッドの呼び出しは式の一部としても使用でき、変数の初期値や他の呼び出しの引数にも記述できます。呼び出し側の引数は型名なしの式とし、個数・型を宣言と一致させます。引数は左から右の順に評価します。値を返さない関数・メソッドは式には使用できません。
値を返さない関数は「□(引数)を 関数名」とします。「を」は「で」に置き換えるか省略でき、助詞の有無にかかわらず関数名の直前には空白を置きます。関数名は省略できません。
関数・メソッドの宣言を先に収集してから本体を解析し、宣言位置より前からの呼び出し、自己再帰、相互再帰を許可します。同じスコープの関数名の重複は認めず、オーバーロードは対応しません。
関数はトップレベル、メソッドはクラス直下にだけ宣言できます。関数・メソッドや分岐・ループの文ブロック内に、関数・クラスを宣言することはできません。
戻り値
戻り値は「□(式)を かえす」と書き、宣言した戻り値型に一致させます。漢字の「返す」は予約語として受理しません。戻り値あり関数で値を返さずに終端へ到達する経路がある場合は、コンパイルエラーとします。
クラス
宣言・継承
▽くらす つくりかた
・もじ しゅるい = 「ともだち」
△
▽くらす ともだちのつくりかた : つくりかた
・かず とし
・もじ なまえ
・はいといいえ とくべつなくぶん
▽かず としをおしえる()
□(とし)を かえす
△
▽としをおぼえる(かず あたらしいとし)
□とし = あたらしいとし
△
△
「▽クラス クラス名」または「▽くらす クラス名」で開始し、「△」で終了します。継承する場合は「: 基底クラス名」を付けます。基底クラスは宣言済みのクラスとし、コンストラクタ名ではありません。
クラスはトップレベルにだけ宣言できます。クラス内のクラス宣言は対応しません。
単一継承のみを許可し、循環継承を禁止します。継承元と同名のメンバーの再宣言は認めず、オーバーライドと名前の隠蔽は対応しません。
フィールドとメソッドはすべて公開のインスタンスメンバーとし、変数・定数・関数の宣言規則に従います。静的メンバーやアクセス修飾子は導入しません。
インスタンス生成
・ともだちのつくりかた ともだち = あたらしい()
「あたらしい()」は宣言左辺の型のインスタンスを生成します。基底クラスを初期化してから、フィールドを宣言順に初期化します。利用者定義コンストラクタと引数付き生成は対応しません。
インスタンス名をクラス名と同じ主旨の別名にすることは命名の推奨であり、コンパイラが意味を判定する必須条件ではありません。
フィールド操作・メソッド呼び出し
・かず ともだちのとし
□ともだちのとし = ともだち.とし
□ともだち.とし = 34
□(35)を ともだち.としをおぼえる
□ともだちのとし = ともだち.としをおしえる()
インスタンスとメンバーの間には全角ピリオド「.」を使います。引数・戻り値・型検査の規則は通常の関数と共通です。
制御構文
ブロックの共通規則
分岐・ループ・関数・クラスは入れ子の構造を持ち、終了記号は最も内側の未終了ブロックに対応させます。対応しない終了記号や終了記号不足はコンパイルエラーです。
分岐の終了は「◇ここまで」または単独の「◇」、ループの終了は「〇ここまで」または単独の「〇」とします。省略できるのは「ここまで」だけで、終了記号そのものは省略できません。関数・クラスは「△」を省略できません。
分岐
・かず ここのかず = 1
◇ここのかず > 0 のとき
□(「せいのかず」)を うつす
◇ほかに ここのかず < 0 のとき
□(「ふのかず」)を うつす
◇ほかに
□(「ゼロ」)を うつす
◇ここまで
「◇条件式 のとき」で開始します。条件式の結果は「はいといいえ」型とし、「のとき」の直前には空白を必要とします。条件を括弧で囲むことは必須ではありません。
条件付きの追加分岐は「◇ほかに 条件式 のとき」とし、条件式の前後に空白を置きます。条件は上から順に評価し、最初に「はい」となった分岐だけを実行します。条件同士が排他的かどうかの証明は要求しません。
条件なしの「◇ほかに」は最後に1回だけ記述でき、それまでの条件がすべて「いいえ」の場合に実行します。分岐は入れ子にできます。
カウンタ形式の繰り返し
〇かず インデックス=0、インデックス<10、インデックス++ くりかえす
□(「くりかえし」)を うつす
〇ここまで
「〇初期化、条件式、更新 くりかえす」の形とし、3つの部分を読点または全角カンマで区切ります。「くりかえす」の直前には空白を必要とし、演算子と変数・定数の間の空白は省略できます。
初期化・条件式・更新はすべて必須で、省略できません。初期化は整数変数の宣言と初期値、または宣言済み整数変数への代入とします。更新は単一の整数変数の「++」だけを許可し、記号の途中には空白を挟みません。更新部分の代入式や複数更新は対応しません。
カウンタ変数が宣言済みの場合、初期化の型名は不要です。ループヘッダー内で「かず」を付けて宣言することもでき、その変数のスコープは当該ループの終了までとします。「++」は更新部分で整数を1増やす操作です。
初期化を1回実行し、条件を評価し、「はい」の間だけ本体・更新・条件評価の順に繰り返します。条件は「はいといいえ」型です。
条件形式・無限ループ
・かず インデックス = 0
〇(インデックス<10) のときはくりかえす
□インデックス = インデックス+1
◇インデックス<2 のとき
□さきっぽへ
◇ここまで
□(「くりかえし」)を うつす
〇ここまで
条件形式は「〇(条件式) のときはくりかえす」とし、本体の実行前に条件を評価します。条件が「はい」の間だけ繰り返し、更新は自動実行されません。終了するために必要な値の更新は利用者が記述します。
〇くりかえす
□(「いっかい」)を うつす
□やめる
〇ここまで
「〇くりかえす」は条件のない無限ループです。
ループの脱出・次の反復
「□やめる」は最も内側のループを脱出します。「□さきっぽへ」は最も内側のループの次の反復へ進みます。カウンタ形式では更新してから条件を評価し、条件形式では条件評価へ進みます。ループの外で使用するとコンパイルエラーとします。
〇かず インデックス=0、インデックス<10、インデックス++ くりかえす
◇インデックス == 5 のとき
□やめる
◇ここまで
〇ここまで
これらの制御文はループ本体へ直接記述することもできます。条件付きで使用する場合は通常の分岐ブロックを使い、「◇ここまで」を含む終了記号を必要とします。「◇条件 のとき やめる」のような1行条件文は受理しません。
コメント
//ここからぎょうまつまでコメント
/*
ふくすうぎょうのコメント
*/
行コメントは「//」から行末まで、複数行コメントは「/*」から最初の「*/」までとします。複数行コメントの入れ子は認めず、閉じ忘れはコンパイルエラーです。文字列内のコメント記号はコメントとして解釈しません。JavaDoc形式の英字名指定としての特別な解釈は行いません。
インポート機能・コンソール出力
あいなはあおいのインポート構文をサポートしません。
文字列を1つ受け取り、標準出力に表示して改行する組み込み関数「うつす」を提供します。戻り値はありません。コンソールや画面を表すオブジェクト名、およびメンバー装飾子は付けません。
・もじ なまえ = 「はなこ」
□(なまえ)を うつす
□(「こんにちは」)を うつす
この例は「はなこ」と「こんにちは」を、それぞれ1行ずつ標準出力へ表示します。空文字列を渡すと改行だけを出力します。
C#へのコンパイル時には Console.WriteLine(string? value) 相当の処理に変換します。string? は生成先APIの説明であり、あいなに空参照を許す意味ではありません。利用者はC#の型名・メソッド名やインポート文を記述する必要はありません。
「うつす」は予約名とし、利用者が同名の関数や変数を宣言できません。引数が1つでない場合や「もじ」型でない場合はコンパイルエラーとします。整数・真偽値の直接出力や暗黙変換は認めず、明示的な文字列変換機能もLv1.1では導入しません。
いずみとの関係および互換性の注意
あいなは、いずみの基本構文と実装基盤を共有することを目指した、文字種・対応機能を限定する派生言語です。専用の記法・組み込み機能・意味規則を持つため、いずみとのソース互換性や、変換なしの動作互換性を直接保証しません。「文字種制限版のサブセット」という説明だけで下位互換を保証するものではありません。
- 文字・型名・予約語に加え、出力関数、1行条件文、引数付き生成などに差があります。全角・半角の一括変換だけでは移植できません。
- 整数のオーバーフロー検査、空文字列によるフィールド初期化、型の完全一致など、あいなの意味規則も生成コードへ反映する必要があります。
- いずみ仕様で未定義の動作を、C#やあおいの機能だけを根拠に対応済みと解釈してはいけません。
- 共通の内部表現を使う場合でも、言語ごとの入力処理・意味検査を行い、文字列・コメントの内容、名前の一意性、元ソースの診断位置を保持します。
- 共通機能の動作互換性は、定義された変換と適合テストによって確認します。既存のいずみを変更せず、ソース変換だけで全機能を実行できるとは保証しません。
実行開始
関数・クラスの外に記述された文を、ソースの上から順に実行する入口として生成します。関数・クラスの宣言自体は実行文として扱いません。
トップレベル変数は入口のローカル変数として扱い、関数・メソッドから参照できません。関数に値を渡す場合は引数を使用します。
診断と終了状態
字句・構文・型エラーには、入力ファイル名・行番号・列番号と日本語の説明を付けます。識別子のNFC正規化や区切り文字の同義処理を行っても、診断は元のソース位置を示します。
行・列は1始まりで、列と文字範囲は正規化前のUTF-16コード単位で数えます。タブは1単位、補助文字は2単位、結合文字は元の単位数で数え、画面上の表示幅とは区別します。CRLFとLFはそれぞれ1つの改行です。先頭BOMは本文から除外し、その直後を1行1列とします。API・CLI・適合試験は同じ位置規則を使用します。
コンパイル成功時の終了コードは0、失敗時は非0とします。失敗した生成物を成功した実行ファイルとして残しません。既存の成果物は保護します。CLI・入出力・SDK・発行処理の失敗も明示的に報告します。
実行時のオーバーフローやゼロ除算はエラーを報告して終了し、正常終了として扱いません。
適合テスト
仕様項目の識別番号ごとに、入力ソース、期待するコンパイル成否、診断位置・種別、実行時の標準出力・標準エラー・終了コードを1組のテストとして管理します。
必須の試験範囲は次のとおりです。
| 対象 | 正常例・境界例・エラー例 |
|---|---|
| 文字・入力形式 | 許可文字、全角/半角の取り違え、BOM有無、不正UTF-8、LF/CRLF、タブ、濁音・半濁音のNFC正規化 |
| 区切り | 関数・メソッドの宣言と呼び出し、カウンタ形式ループの読点・全角カンマ・混在、半角カンマ拒否、整形時の読点統一 |
| 内容保持 | 文字列・コメント中の読点・全角カンマ・漢字・英数字を変更しないこと、文字列中のコメント記号 |
| 型・値 | 型不一致、定数の再代入、ローカル変数の代入前参照、フィールド初期値、空参照を受理しないこと |
| 整数・式 | 整数の上下限、最小値の負数、定数式・実行時のオーバーフロー、更新・除算、ゼロ除算、0方向の切り捨て、短絡評価 |
| 関数 | 引数個数・型、宣言前呼び出し、自己再帰・相互再帰、返却漏れ、重複名・オーバーロード拒否 |
| ブロック・ループ | 入れ子、終了記号不足・不一致、ループ外の制御文、最内ループの選択、継続時の更新と条件評価 |
| クラス | 基底クラスとフィールドの初期化順、メンバー操作、完全一致の型検査、引数付き生成・メンバー再宣言等の拒否 |
| コンソール出力 | 文字列1つ、行末の改行、空文字列、引数個数違い・整数・真偽値の拒否 |
| CLI・配布 | オプション省略・大文字小文字、誤った引数、既存出力の保護、発行失敗、SDKなしの対象環境での .exe 起動 |
対象SDKでのビルド・実行試験も行い、各必須項目の合格条件を固定します。全必須項目のテストが通ることを、Lv1.1実装の適合条件とします。
おわりに
日本語プログラミング言語あおい(Aoi)のMVP実装完了を受けて、ひらがなプログラミング言語あいな(Aina)の構文仕様を現時点でいったん確定しました。最初は手書きの要求仕様でしたが、これだけでは実装できませんよとGithub Copilot Pro+版に診断されて
、調整した結果がこのバージョンとなります。
使用AI
GitHub Copilot
GitHub CopilotのPro+版。実装と検証の主担当。
Microsoft Copilot
GitHub Copilotのスーパバイザ2
-
あおい言語ファミリー(あおい・いずみ・なごみ・あいな)の対象仕様の本文・図はCC BY 4.0、指定自作例示コードはCC0 1.0。転載・改変等は各ライセンスに従い、第三者素材・既存コードは各条件に従います。
独立実装は商用・非商用、公開・非公開を問わず自由で、実装のライセンスも自由。仕様のライセンスは実装・利用者プログラムへ自動適用されません。名称・ロゴ・公式認定・特許・第三者の権利は別扱いとなります。仕様・例示は各ライセンスに従い無保証です。
付記:対象「ひらがなプログラミング言語 あいな言語仕様2026 Lv1.1」|権利者・表示名 mylifewithviolin|原文 URL |CC0対象「言語仕様」内の全自作あいなソースコード例|除外 なし ↩ -
スーパバイザとしてMicrosoft Copilotを使いGitHub CopilotのCodeAgent推論量を最小化するプロンプトをCopilotで生成しGitHub CopilotのCodeAgentで実行という工法?を採用しています。 ↩