nanako


Namenanako JSON
Version 0.1.3 PyPI version JSON
download
home_pagehttps://github.com/kkuramitsu/nanako
SummaryAn educational programming language for the generative AI era
upload_time2025-09-12 07:48:41
maintainerNone
docs_urlNone
authorNanako Project
requires_python>=3.8
licenseMIT
keywords educational programming-language japanese interpreter
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ななこ (Nanako) - 教育用プログラミング言語

ななこは生成AI時代の教育用プログラミング言語です。限られた機能でチューリング完全性を学び、プログラミングの本質を理解することを目的としています。

## 特徴

- **限定された演算**: インクリメント、デクリメント、絶対値、符号反転のみ
- **0との比較のみ**: 条件文は0との比較のみ可能
- **定回数ループ**: N回繰り返しまたは配列の長さ分繰り返し
- **関数定義**: 再帰も可能な関数定義
- **チューリング完全**: これらの機能だけで理論上あらゆる計算が可能

## インストール

```bash
git clone <このリポジトリ>
cd nanako
```

## 使い方

### ファイル実行
```bash
python run_nanako.py examples/basic.nanako
```

### インタラクティブモード
```bash
python run_nanako.py --interactive
```

### テスト実行
```bash
python simple_test.py
python sample_programs.py
python japanese_samples.py
```

## 言語仕様

### 基本構文

#### 変数代入
```
x = 42
xを10とする
```

#### インクリメント・デクリメント
```
xを増やす
xを減らす
```

#### 条件分岐
```
もし、xが0以上ならば、{
    yを10とする
}
そうでなければ {
    yを20とする
}
```

比較演算子:
- `以上`: >= 0
- `以下`: <= 0  
- `より大きい`: > 0
- `より小さい`: < 0
- `以外`: != 0
- `未満`: < 0
- 空文字: == 0

#### ループ
```
5回、くり返す{
    xを増やす
}
```

配列の長さ分ループ:
```
[1, 2, 3]回、くり返す{
    counterを増やす
}
```

#### 関数定義と呼び出し
```
入力 x, y に対し {
    y回、くり返す{
        xを増やす
    }
    xが答え
}
```

#### 配列操作
```
arr = [1, 2, 3]
arr[0] = 99      # 要素の更新
x = arr[1]       # 要素の参照
arr[?] = 4       # 末尾に要素を追加(新機能!)
```

#### 文字列リテラル(新機能!)
```
message = "Hello"     # 文字コードの配列 [72, 101, 108, 108, 111]
greeting = "こんにちは"  # 日本語も対応
text = "Line1\nLine2" # エスケープシーケンス対応
```

#### 特殊演算
```
x = |y|    # 絶対値または配列の長さ
x = -y     # 符号反転
x = ?      # null値
```

## サンプルプログラム

### 足し算関数
```
たし算 = 入力 X, Y に対し {
    Y回、くり返す{
        Xを増やす
    }
    Xが答え
}
```

### 引き算関数  
```
ひき算 = 入力 X, Y に対し {
    Y回、くり返す{
        Xを減らす
    }
    Xが答え
}
```

### 絶対値関数
```
絶対値 = 入力 X に対し {
    もし Xが0より小さいならば {
        ひき算(0, X)が答え
    }
    そうでなければ {
        Xが答え
    }
}
```

## ファイル構成

- `nanako.py`: メインのインタープリター実装
- `run_nanako.py`: 実行可能ファイル
- `test_nanako.py`: 完全なテストスイート
- `simple_test.py`: 基本機能のテスト
- `sample_programs.py`: サンプルプログラムとデモ
- `japanese_samples.py`: 日本語構文のサンプル
- `examples/`: サンプルファイル
- `memo.txt`: 言語仕様とサンプルコード

## 教育的価値

1. **計算の本質**: 複雑な演算を基本操作の組み合わせで実現
2. **アルゴリズム思考**: 制約の中で問題解決する思考力
3. **チューリング完全性**: 最小限の機能で万能性を理解
4. **プログラミング概念**: 変数、関数、制御構造の基礎

## 実装について

このインタープリターはPythonで実装されており、以下の機能を含みます:

- 抽象構文木(AST)による構文表現
- 再帰下降パーサーによる構文解析
- 環境(環境辞書)による変数管理
- 例外による制御フローの実装

## ライセンス

MIT License

## 貢献

プルリクエストや改善提案を歓迎します。教育目的に適した機能追加や、より良い日本語構文の提案などお待ちしています。

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/kkuramitsu/nanako",
    "name": "nanako",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "educational, programming-language, japanese, interpreter",
    "author": "Nanako Project",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/db/4a/caff701756ed1cb26ecc78fc506f89700a37773621731adac1f576bc3723/nanako-0.1.3.tar.gz",
    "platform": null,
    "description": "# \u306a\u306a\u3053 (Nanako) - \u6559\u80b2\u7528\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\n\n\u306a\u306a\u3053\u306f\u751f\u6210AI\u6642\u4ee3\u306e\u6559\u80b2\u7528\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u3059\u3002\u9650\u3089\u308c\u305f\u6a5f\u80fd\u3067\u30c1\u30e5\u30fc\u30ea\u30f3\u30b0\u5b8c\u5168\u6027\u3092\u5b66\u3073\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u672c\u8cea\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3092\u76ee\u7684\u3068\u3057\u3066\u3044\u307e\u3059\u3002\n\n## \u7279\u5fb4\n\n- **\u9650\u5b9a\u3055\u308c\u305f\u6f14\u7b97**: \u30a4\u30f3\u30af\u30ea\u30e1\u30f3\u30c8\u3001\u30c7\u30af\u30ea\u30e1\u30f3\u30c8\u3001\u7d76\u5bfe\u5024\u3001\u7b26\u53f7\u53cd\u8ee2\u306e\u307f\n- **0\u3068\u306e\u6bd4\u8f03\u306e\u307f**: \u6761\u4ef6\u6587\u306f0\u3068\u306e\u6bd4\u8f03\u306e\u307f\u53ef\u80fd\n- **\u5b9a\u56de\u6570\u30eb\u30fc\u30d7**: N\u56de\u7e70\u308a\u8fd4\u3057\u307e\u305f\u306f\u914d\u5217\u306e\u9577\u3055\u5206\u7e70\u308a\u8fd4\u3057\n- **\u95a2\u6570\u5b9a\u7fa9**: \u518d\u5e30\u3082\u53ef\u80fd\u306a\u95a2\u6570\u5b9a\u7fa9\n- **\u30c1\u30e5\u30fc\u30ea\u30f3\u30b0\u5b8c\u5168**: \u3053\u308c\u3089\u306e\u6a5f\u80fd\u3060\u3051\u3067\u7406\u8ad6\u4e0a\u3042\u3089\u3086\u308b\u8a08\u7b97\u304c\u53ef\u80fd\n\n## \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n\n```bash\ngit clone <\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea>\ncd nanako\n```\n\n## \u4f7f\u3044\u65b9\n\n### \u30d5\u30a1\u30a4\u30eb\u5b9f\u884c\n```bash\npython run_nanako.py examples/basic.nanako\n```\n\n### \u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\n```bash\npython run_nanako.py --interactive\n```\n\n### \u30c6\u30b9\u30c8\u5b9f\u884c\n```bash\npython simple_test.py\npython sample_programs.py\npython japanese_samples.py\n```\n\n## \u8a00\u8a9e\u4ed5\u69d8\n\n### \u57fa\u672c\u69cb\u6587\n\n#### \u5909\u6570\u4ee3\u5165\n```\nx = 42\nx\u309210\u3068\u3059\u308b\n```\n\n#### \u30a4\u30f3\u30af\u30ea\u30e1\u30f3\u30c8\u30fb\u30c7\u30af\u30ea\u30e1\u30f3\u30c8\n```\nx\u3092\u5897\u3084\u3059\nx\u3092\u6e1b\u3089\u3059\n```\n\n#### \u6761\u4ef6\u5206\u5c90\n```\n\u3082\u3057\u3001x\u304c0\u4ee5\u4e0a\u306a\u3089\u3070\u3001{\n    y\u309210\u3068\u3059\u308b\n}\n\u305d\u3046\u3067\u306a\u3051\u308c\u3070 {\n    y\u309220\u3068\u3059\u308b\n}\n```\n\n\u6bd4\u8f03\u6f14\u7b97\u5b50:\n- `\u4ee5\u4e0a`: >= 0\n- `\u4ee5\u4e0b`: <= 0  \n- `\u3088\u308a\u5927\u304d\u3044`: > 0\n- `\u3088\u308a\u5c0f\u3055\u3044`: < 0\n- `\u4ee5\u5916`: != 0\n- `\u672a\u6e80`: < 0\n- \u7a7a\u6587\u5b57: == 0\n\n#### \u30eb\u30fc\u30d7\n```\n5\u56de\u3001\u304f\u308a\u8fd4\u3059{\n    x\u3092\u5897\u3084\u3059\n}\n```\n\n\u914d\u5217\u306e\u9577\u3055\u5206\u30eb\u30fc\u30d7:\n```\n[1, 2, 3]\u56de\u3001\u304f\u308a\u8fd4\u3059{\n    counter\u3092\u5897\u3084\u3059\n}\n```\n\n#### \u95a2\u6570\u5b9a\u7fa9\u3068\u547c\u3073\u51fa\u3057\n```\n\u5165\u529b x, y \u306b\u5bfe\u3057 {\n    y\u56de\u3001\u304f\u308a\u8fd4\u3059{\n        x\u3092\u5897\u3084\u3059\n    }\n    x\u304c\u7b54\u3048\n}\n```\n\n#### \u914d\u5217\u64cd\u4f5c\n```\narr = [1, 2, 3]\narr[0] = 99      # \u8981\u7d20\u306e\u66f4\u65b0\nx = arr[1]       # \u8981\u7d20\u306e\u53c2\u7167\narr[?] = 4       # \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0\uff08\u65b0\u6a5f\u80fd\uff01\uff09\n```\n\n#### \u6587\u5b57\u5217\u30ea\u30c6\u30e9\u30eb\uff08\u65b0\u6a5f\u80fd\uff01\uff09\n```\nmessage = \"Hello\"     # \u6587\u5b57\u30b3\u30fc\u30c9\u306e\u914d\u5217 [72, 101, 108, 108, 111]\ngreeting = \"\u3053\u3093\u306b\u3061\u306f\"  # \u65e5\u672c\u8a9e\u3082\u5bfe\u5fdc\ntext = \"Line1\\nLine2\" # \u30a8\u30b9\u30b1\u30fc\u30d7\u30b7\u30fc\u30b1\u30f3\u30b9\u5bfe\u5fdc\n```\n\n#### \u7279\u6b8a\u6f14\u7b97\n```\nx = |y|    # \u7d76\u5bfe\u5024\u307e\u305f\u306f\u914d\u5217\u306e\u9577\u3055\nx = -y     # \u7b26\u53f7\u53cd\u8ee2\nx = ?      # null\u5024\n```\n\n## \u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b0\u30e9\u30e0\n\n### \u8db3\u3057\u7b97\u95a2\u6570\n```\n\u305f\u3057\u7b97 = \u5165\u529b X, Y \u306b\u5bfe\u3057 {\n    Y\u56de\u3001\u304f\u308a\u8fd4\u3059{\n        X\u3092\u5897\u3084\u3059\n    }\n    X\u304c\u7b54\u3048\n}\n```\n\n### \u5f15\u304d\u7b97\u95a2\u6570  \n```\n\u3072\u304d\u7b97 = \u5165\u529b X, Y \u306b\u5bfe\u3057 {\n    Y\u56de\u3001\u304f\u308a\u8fd4\u3059{\n        X\u3092\u6e1b\u3089\u3059\n    }\n    X\u304c\u7b54\u3048\n}\n```\n\n### \u7d76\u5bfe\u5024\u95a2\u6570\n```\n\u7d76\u5bfe\u5024 = \u5165\u529b X \u306b\u5bfe\u3057 {\n    \u3082\u3057 X\u304c0\u3088\u308a\u5c0f\u3055\u3044\u306a\u3089\u3070 {\n        \u3072\u304d\u7b97(0, X)\u304c\u7b54\u3048\n    }\n    \u305d\u3046\u3067\u306a\u3051\u308c\u3070 {\n        X\u304c\u7b54\u3048\n    }\n}\n```\n\n## \u30d5\u30a1\u30a4\u30eb\u69cb\u6210\n\n- `nanako.py`: \u30e1\u30a4\u30f3\u306e\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u30fc\u5b9f\u88c5\n- `run_nanako.py`: \u5b9f\u884c\u53ef\u80fd\u30d5\u30a1\u30a4\u30eb\n- `test_nanako.py`: \u5b8c\u5168\u306a\u30c6\u30b9\u30c8\u30b9\u30a4\u30fc\u30c8\n- `simple_test.py`: \u57fa\u672c\u6a5f\u80fd\u306e\u30c6\u30b9\u30c8\n- `sample_programs.py`: \u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u30c7\u30e2\n- `japanese_samples.py`: \u65e5\u672c\u8a9e\u69cb\u6587\u306e\u30b5\u30f3\u30d7\u30eb\n- `examples/`: \u30b5\u30f3\u30d7\u30eb\u30d5\u30a1\u30a4\u30eb\n- `memo.txt`: \u8a00\u8a9e\u4ed5\u69d8\u3068\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\n\n## \u6559\u80b2\u7684\u4fa1\u5024\n\n1. **\u8a08\u7b97\u306e\u672c\u8cea**: \u8907\u96d1\u306a\u6f14\u7b97\u3092\u57fa\u672c\u64cd\u4f5c\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u5b9f\u73fe\n2. **\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u601d\u8003**: \u5236\u7d04\u306e\u4e2d\u3067\u554f\u984c\u89e3\u6c7a\u3059\u308b\u601d\u8003\u529b\n3. **\u30c1\u30e5\u30fc\u30ea\u30f3\u30b0\u5b8c\u5168\u6027**: \u6700\u5c0f\u9650\u306e\u6a5f\u80fd\u3067\u4e07\u80fd\u6027\u3092\u7406\u89e3\n4. **\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u6982\u5ff5**: \u5909\u6570\u3001\u95a2\u6570\u3001\u5236\u5fa1\u69cb\u9020\u306e\u57fa\u790e\n\n## \u5b9f\u88c5\u306b\u3064\u3044\u3066\n\n\u3053\u306e\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u30fc\u306fPython\u3067\u5b9f\u88c5\u3055\u308c\u3066\u304a\u308a\u3001\u4ee5\u4e0b\u306e\u6a5f\u80fd\u3092\u542b\u307f\u307e\u3059:\n\n- \u62bd\u8c61\u69cb\u6587\u6728(AST)\u306b\u3088\u308b\u69cb\u6587\u8868\u73fe\n- \u518d\u5e30\u4e0b\u964d\u30d1\u30fc\u30b5\u30fc\u306b\u3088\u308b\u69cb\u6587\u89e3\u6790\n- \u74b0\u5883(\u74b0\u5883\u8f9e\u66f8)\u306b\u3088\u308b\u5909\u6570\u7ba1\u7406\n- \u4f8b\u5916\u306b\u3088\u308b\u5236\u5fa1\u30d5\u30ed\u30fc\u306e\u5b9f\u88c5\n\n## \u30e9\u30a4\u30bb\u30f3\u30b9\n\nMIT License\n\n## \u8ca2\u732e\n\n\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3084\u6539\u5584\u63d0\u6848\u3092\u6b53\u8fce\u3057\u307e\u3059\u3002\u6559\u80b2\u76ee\u7684\u306b\u9069\u3057\u305f\u6a5f\u80fd\u8ffd\u52a0\u3084\u3001\u3088\u308a\u826f\u3044\u65e5\u672c\u8a9e\u69cb\u6587\u306e\u63d0\u6848\u306a\u3069\u304a\u5f85\u3061\u3057\u3066\u3044\u307e\u3059\u3002\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "An educational programming language for the generative AI era",
    "version": "0.1.3",
    "project_urls": {
        "Homepage": "https://github.com/kimio/nanako",
        "Repository": "https://github.com/kimio/nanako"
    },
    "split_keywords": [
        "educational",
        " programming-language",
        " japanese",
        " interpreter"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7d632822396e772d594d6857e82b387b19b70498cb9b282260c2c3aef19b5a84",
                "md5": "712c5678e3ec74640ed4bc2119d870bf",
                "sha256": "4f72b69b05a41ede626f2365317639ffea5865aa951e02704abb7b4b9616086a"
            },
            "downloads": -1,
            "filename": "nanako-0.1.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "712c5678e3ec74640ed4bc2119d870bf",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 20502,
            "upload_time": "2025-09-12T07:48:40",
            "upload_time_iso_8601": "2025-09-12T07:48:40.135735Z",
            "url": "https://files.pythonhosted.org/packages/7d/63/2822396e772d594d6857e82b387b19b70498cb9b282260c2c3aef19b5a84/nanako-0.1.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "db4acaff701756ed1cb26ecc78fc506f89700a37773621731adac1f576bc3723",
                "md5": "7d8a0f5d75f732c973cfca7e80018047",
                "sha256": "9ab0597899ab8529110fd668404d23d2afba6653deba7a79d5b8b96b8c4c2d9f"
            },
            "downloads": -1,
            "filename": "nanako-0.1.3.tar.gz",
            "has_sig": false,
            "md5_digest": "7d8a0f5d75f732c973cfca7e80018047",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 20669,
            "upload_time": "2025-09-12T07:48:41",
            "upload_time_iso_8601": "2025-09-12T07:48:41.453013Z",
            "url": "https://files.pythonhosted.org/packages/db/4a/caff701756ed1cb26ecc78fc506f89700a37773621731adac1f576bc3723/nanako-0.1.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-12 07:48:41",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "kkuramitsu",
    "github_project": "nanako",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "nanako"
}
        
Elapsed time: 0.48807s