はじめに
日本語プログラミング言語いずみ(Izumi)(開発コード名 日本語ロジック仕様記述言語Re:Mind)は、制御構文の開始シンボルとして、◇、〇、□、・などの全角記号を用い、箇条書きされた日本文としての体裁を日本語プログラミング言語あおい(Aoi)の構文と共有しています。
◇は分岐構文、〇はループ構文の開始と終了を表し、冗長な日本語表記がなくてもフロー図の表現に慣れている方が直感的に認識できることを考慮しています。
いずみ(Izumi)はシステムエンジニアなどソースコードを直接生産しない職種の方々が、自ら考案したロジックをコンパイル検証するためのコンソールアプリベースのコンパイラ言語となります。各レイヤーで有力な実装言語に対応するトランスコンパイラ言語のあおいにソースコードをトランスコンパイルすることもできるとしています。
この記事内容の作業目的
日本語プログラミング言語あおい(Aoi)のMVP実装完了を受けて、コンパイラ言語いずみ(Izumi)(開発コード名Re:Mind)の構文仕様を現時点でいったん確定します。
この記事内容の保証
本記事に開示された仕様は次バージョンの仕様においては予告なく変更される場合があります。また、このバージョンの仕様内で補足や追加が行われる場合もあります。
概要
日本語プログラミング言語いずみ(Izumi)(開発コード名 日本語ロジック仕様記述言語Re:Mind)はオープンな設計言語仕様で1、どなたでもこの記法を使いロジックを記述することができます。
また、コンソールアプリケーションの実行コードをコンパイルします。ターゲット言語実行系のライブラリは基本的にサポートせず、あくまでロジックの検証用にコンソール出力の実行コードを生成するものとなります。ただし、近い将来データベース照会言語は一般的なSQL文記述で実行可能な状態をサポートする予定です。
想定されるコンパイル先実行環境
C言語のシンタックスを共有・継承する以下の静的型付け言語の実行環境
・Java
・C#
・Go
・Zig
トランスコンパイルオプション
・あおい
あおいといずみの言語仕様の基本的な相違
JavaDoc形式の関数名コメント
あおいは英文字を基調とした実装言語へのトランスコンパイルが基本となる実装のため、JavaDoc形式の関数名コメントにより英語名への変換を明示的にサポートしています。しかし、設計者が実装者向けの英字名を細かく指定することが必須であるのは、設計者の負担になる場合があります。
そこで、設計者向け言語のいずみの場合はJavaDoc形式のコメントによる英字名の指定は必須とはしていません。ただし、あおいへのトランスコンパイルオプションの場合は日本語から仮の英字名を出力します。あおいも将来的にはJavaDoc形式のコメントを省略した場合はフォールバックとして日本語から仮の英字名出力を構想しています。
インポート機能
あおいはインポート構文をサポートしますが、いずみはサポートしません。本文書の末尾参照。
言語仕様
変数
・整数 年齢 = 34
・文字列 名前 = "花子"
・ブール値 特待区分 = true
□全角文字の中点に続いて、型名を記述し、空白に続いて変数名を記述します。
・型名は一般的なプログラミング言語の半角型名でも可。
・半角等号で初期値を宣言できます。
・変数 int 年齢
・変数文字列 名前
・変数bool 特待区分 = true
□全角中点に続いて「変数」と書くこともできます。後述の定数と並んだ時の見栄え、わかりやすさのため、変数宣言であることを明示。
定数
・定数 整数 年齢 = 34
・定数文字列 名前 = "花子"
・定数ブール値 特待区分 = true
□全角文字の中点に続いて「定数」と書き、続いてターゲット言語の物理型名を半角文字で記述し、半角空白に続いて定数名を記述します。
・型名は一般的なプログラミング言語の半角型名でも可。
・半角等号で初期値を必ず代入します。
関数
関数の実行
□年齢 = メンバーの年齢を取得する(名前,特待区分)
□(名前,特待区分)で メンバーの年齢を設定する
◇値を返す関数の場合、全角記号の四角□に続いて、戻り値を受け取る変数名を記述し、半角等号に続いて関数名を記述します。
・続いて半角かっこを設け、ターゲット言語の物理型名と変数名を半角空白を挟んで、カンマ区切りで記述し、半角かっこで閉じます。
◇値を返さない関数の場合、全角記号の四角□に続いて、半角かっこを設け、ターゲット言語の物理型名と変数名を半角空白を挟んで、カンマ区切りで記述し、半角かっこで閉じます。
・半角かっこで閉じた後、続けて関数名を書くことができます。
半角かっこで閉じた後、続けて「で」や「を」を付加し、半角空白を挟んで関数名を書くこともできます。このひらがなは無視します。
値を返す関数の宣言
▽整数 メンバーの年齢を取得する(文字列 名前,ブール値 区分)
//todo
□(齢)を 返す
△
□全角記号の下三角▽が関数宣言の開始となります。
・続いて戻り値型を書きます。戻り値あり関数としては省略不可。
・続いて半角空白をおいて、関数名を書きます。
・続いて半角かっこを設け、型名と変数名を半角空白を挟んで、カンマ区切りで記述し、半角かっこで閉じます。
・型名は一般的なプログラミング言語の半角型名でも可。
・全角記号の上三角△で定義を終了します。
・かならず、定義終了前に全角四角に続き、変数名に空白を挟んで「返す」と記述するとします。
値を返さない関数の宣言
▽メンバーの年齢を設定する(文字列 名前,ブール値 区分)
//todo
△
□全角記号の下三角▽が関数宣言の開始となります。
・続いて関数名を書きます。
・続いて半角かっこを設け、型名と変数名を半角空白を挟んで、カンマ区切りで記述し、半角かっこで閉じます。
・全角記号の上三角△で定義を終了します。
クラス
クラスの宣言
▽class メンバーの取り扱い方 : 取り扱い方
・変数整数 年齢
・変数文字列 名前
・変数ブール値 特待区分
▽整数 メンバーの年齢を取得する(string 名前,bool 区分)
//todo
□(齢)を 返す
△
▽メンバーの年齢を設定する(string 名前,bool 区分)
//todo
△
△
□全角記号の下三角▽がクラス宣言の開始となります。
・続いて半角空白をおいて、classを書きます。ここは全角カタカナで「クラス」と書いても可。
・続いて半角空白をおいて、クラス名を書きます。
・続いて半角空白をおいて、クラス継承表記を書きます。その後は半角空白をおいて、継承元のクラス名を書きます。継承しない場合はこれらの記述は省略可です。
・クラスのメンバの書き方は変数宣言、関数宣言に準じます。
・型名は一般的なプログラミング言語の半角型名でも可。
・全角記号の上三角△で定義を終了します。
クラスのインスタンス宣言
・メンバーの取り扱い方 メンバー取り扱い方法 = new()
□クラスのインスタンス名は同じ主旨の別名としてください。
・コンストラクタにオーバーロードがある場合は、かっこ内に引数を記述します。
クラスのインスタンスの変数操作
□年齢 = メンバー取り扱い方法.年齢
□メンバー取り扱い方法.年齢 = 年齢
□クラスのインスタンス名の装飾子は半角ドットです。
クラスのインスタンスの関数実行
□年齢 = メンバー取り扱い方法.メンバーの年齢を取得する(名前,特待区分)
□(名前,特待区分)で メンバー取り扱い方法.メンバーの年齢を設定する
□クラスのインスタンス名の装飾子は半角ドットです。
◇値を返す関数の場合、全角記号の四角□に続いて、戻り値を受け取る変数名を記述し、半角等号に続いてクラスのインスタンス名と関数名を半角ドットを挟んで記述します。
・続いて半角かっこを設け、型名と変数名を半角空白を挟んで、カンマ区切りで記述し、半角かっこで閉じます。
◇値を返さない関数の場合、全角記号の四角□に続いて、半角かっこを設け、型名と変数名を半角空白を挟んで、カンマ区切りで記述し、半角かっこで閉じます。
・半角かっこで閉じた後、続けてクラスのインスタンス名と関数名を半角ドットを挟んで書くことができます。
半角かっこで閉じた後、続けて「で」や「を」を付加し、半角空白を挟んで関数名を書くこともできます。このひらがなは無視します。
四則演算、論理演算
・一般的なプログラミング言語のシンタックス(中置記法)に準じます。
制御構文
分岐
◇i > 0 の場合
//todo
◇ここまで
□全角記号のひし形◇が条件分岐の開始となります。
・続いて論理式を書きます。半角かっこは不要。
・続いて「の場合」と書きます。半角で書かれた論理式とはくっついていても可。
・全角記号のひし形◇が条件分岐の終了となります。
・つづいて「ここまで」と書くことができます。省略も可。
◇i > 0 の場合
//todo
◇他に i < 0 の場合
//todo
◇他に
//todo
◇ここまで
◇途中で最初の論理式とは排他的な条件をつづける場合は、全角ひし形◇に続いて「他に」と書いて、論理式を書いて、「の場合」と書きます。
・論理式の前後の空白は、論理式を半角で書いている場合は省略できます。
◇最後に例外条件を明示する場合は、全角ひし形◇に続いて「他に」と書きます。
◇i > 0 の場合
◇j == 0 の場合
//todo
◇他に
//todo
◇ここまで
//todo
◇他に i < 0 の場合
//todo
◇他に
//todo
◇ここまで
□おなじ分岐構文を使って、入れ子で記述することができます。
繰り返し
〇i=0,i<10,i++ 繰り返す
//todo
〇ここまで
□全角記号の丸印〇が繰り返しの開始となります。
・続いてカウンタ論理式をカンマ区切りで書きます。カウンタ変数の型名と半角かっこは不要。
・続いて「繰り返す」と書きます。半角で書かれた論理式とはくっついていても可。
・全角記号の丸印〇が繰り返しの終了となります。
・つづいて「ここまで」と書くことができます。省略も可。
〇繰り返す
//todo
〇ここまで
□全角記号の丸印〇に続いて「繰り返す」と書いた場合は無限ループになります。
〇繰り返す
//todo
◇j==0 の場合 やめる
//todo
〇ここまで
・繰り返し構文内で条件分岐文を書いて「やめる」と書くと、直接のループを脱出します。
/** index */
〇int インデックス=0,インデックス<10,インデックス++ 繰り返す
//todo
〇ここまで
・繰り返し構文のカウンタ変数をインラインで日本字で宣言することもできます。
〇(i<10) の間は繰り返す
//todo
〇ここまで
・while(i<10) のような構文の表記です。
〇(i<10) の間は繰り返す
◇i<2 の場合
□ループ先頭へ
//todo
〇ここまで
・条件分岐と合わせて、ループ先頭に制御を移す場合は「ループ先頭へ」を使います。
コメント
通常コメント
//todo
□ダブルスラッシュ//で行末までコメントアウトします。
/*
todo
todo
*/
□スラッシュとアスタリスク/でコメント行開始、アスタリスクとスラッシュ/でコメント行の終了。
インポート機能
□今日のシステム開発に使われる有力言語は巨大なライブラリを保持しておりますが、利用の際には名前空間を指定したり、パッケージを指定したりして、予め利用する範囲を指定するが一般的です。
・また言語によっては、利用する関数、変数単位でインポートするものもあります。
□そこであおいはあらかじめタ-ゲット言語の全方位のライブラリをサポートすることはせず、一定のルールで利用可とできる構文を提供します。
□しかし、いずみは設計段階でのロジックの検証用ソースコードに広いライブラリの指定は負担となるため、コンソールアプリケーションとして制限することで、ライブラリの引用は制限されます。いずみはあおいのインポート文をサポートしません。
あおいにトランスコンパイルされる場合は下記のインポート文が既定で出力されます。
C#向けにトランスコンパイルされる場合
■インポートする System
▼public static class コンソール Console
▼public static 一行表示する(string? value)
■WriteLine (string? value)
▲
▲
Java向けにトランスコンパイルされる場合
■インポートする java.lang.System
▼public class コンソール PrintStream System.out
▼public static 一行表示する(string value)
■println (String value)
▲
▲
いずみとしてコンパイルする場合は「コンソール.一行表示する」は予約機能となります。
おわりに
日本語プログラミング言語あおい(Aoi)のMVP実装完了を受けて、コンパイラ言語いずみ(Izumi)の構文仕様を現時点でいったん確定しました。
-
あおい言語ファミリー(あおい・いずみ・なごみ・あいな)の対象仕様の本文・図はCC BY 4.0、指定自作例示コードはCC0 1.0。転載・改変等は各ライセンスに従い、第三者素材・既存コードは各条件に従います。
独立実装は商用・非商用、公開・非公開を問わず自由で、実装のライセンスも自由。仕様のライセンスは実装・利用者プログラムへ自動適用されません。名称・ロゴ・公式認定・特許・第三者の権利は別扱いとなります。仕様・例示は各ライセンスに従い無保証です。
付記:対象「日本語プログラミング言語 いずみ(Izumi)2026 Lv1.0」|権利者・表示名 mylifewithviolin|原文 URL |CC0対象「言語仕様」内の全自作いずみソースコード例|除外 なし ↩