80
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ブロックプログラミング言語】Trees を作りました

Last updated at Posted at 2024-03-26

はじめに

奇抜な言語を作りたいと思っていた私。大学にて改めてコンパイラを学びなおす。
「構文木って美しいよなぁ...」→ 「ん?これを直接落とし込むプログラム言語を作ればいいじゃないか!」

そうして Trees 言語がうまれたのであった。


チュートリアル は GitHub に公開しました。この記事ではそれをさらにまとめたものを説明します。

「Trees」は、こんなプログラミング言語です

今回私が作成したブロックプログラミング言語 Trees では、構文木チックにプログラムを記述することが可能です。

例えば、下のプログラムは「3 × 4」...つまり「12」を出力します。

3 × 4 を表示するプログラム - 12を表示
        ┌─────┐
        │print│
        └───┬─┘
        ┌───┴─┐
    ┌───┤  *  ├──┐
    │   └─────┘  │
┌───┴─┐      ┌───┴─┐
│  3  │      │  4  │
└─────┘      └─────┘ 

次はFizzBuzzのプログラムです。
このプログラムは "12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz" を表示します。

FizzBuzz
┌───┐      
│seq├─────────────────────┐
│   ├───────────────┐   ┌─┴───┐
└─┬─┘              ┌┴──┐│print├──┐
┌─┴────┐    ┌──────┤for│└─────┘┌─┴─┐
│defset├─┐ ┌┴─┐ ┌──┤   │       │out│
└─┬────┘ │ │15│ │  └─┬─┘       └───┘
┌─┴───┐┌─┴┐└──┘┌┴──┐┌•──┐  
│"out"││""│    │"i"││set├───┐
└─────┘└──┘    └───┘└─┬─┘  ┌┴─────┐
                    ┌─┴───┐│strcat│
                    │"out"│└┬───┬─┘
                    └─────┘┌┴──┐│  
                           │out││  
                           └───┘│
          ┌─────────────────────┘
          │   ┌───────────────┐   ┌───────────┐   ┌───┐
         ┌┴──┐│              ┌┴──┐│          ┌┴──┐│  ┌┴─────┐
 ┌───────┤if0├┘       ┌──────┤if0├┘   ┌──────┤if0├┘  │to str│
┌┴┐      └┬──┘       ┌┴┐     └┬──┘   ┌┴┐     └┬──┘   └┬─────┘
│%├───┐  ┌┴─────────┐│%├───┐ ┌┴─────┐│%├───┐ ┌┴─────┐┌┴┐
└┬┘  ┌┴─┐│"FizzBuzz"│└┬┘  ┌┴┐│"Fizz"│└┬┘  ┌┴┐│"Buzz"││+├─┐
┌┴┐  │15│└──────────┘┌┴┐  │3│└──────┘┌┴┐  │5│└──────┘└┬┘┌┴┐
│+├─┐└──┘            │+├─┐└─┘        │+├─┐└─┘        ┌┴┐│1│
└┬┘┌┴┐               └┬┘┌┴┐          └┬┘┌┴┐          │i│└─┘
┌┴┐│1│               ┌┴┐│1│          ┌┴┐│1│          └─┘
│i│└─┘               │i│└─┘          │i│└─┘
└─┘                  └─┘             └─┘

自作のプロシージャ(ほかの言語で言う関数)を定義し、処理の共通化をはかることもできます。

プロシージャ定義 - 6 を表示
┌───┐      
│seq├────────────────────┐
└─┬─┘                   ┌┴────┐
┌─┴─────┐               │print│
│defproc├─────┐         └┬────┘
└┬──────┘    ┌•┐        ┌┴────────┐
┌┴──────────┐│*├─┐      │two times│
│"two times"│└┬┘┌┴─┐    └┬────────┘
└───────────┘┌┴┐│$0│    ┌┴┐
             │2│└──┘    │3│
             └─┘        └─┘

おわりに

無粋ながら Trees 言語は完全にネタとして作ったことを申し添えておきます。

GitHub

コード

チュートリアル

80
25
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
80
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?