オンプレ系インフラエンジニアがAzureを勉強する

いつか誰かの何かの役に立つと嬉しいな

『日本語プログラミング言語「なでしこ」に関する解説』を読んでの感想

はじめに

情報処理学会誌のコラムに載っていた下記記事を読む機会がありました。
note.com

これをきっかけにプログラミング言語の作り方を調べてみたので自分用に簡単にまとめます。

日本語プログラミング言語「なでしこ」とは?

上記のコラムを読んでいただくのが一番良いですが、簡単に。

  • 日本語で書けるソースコード
  • 対象使用者:プログラミング初心者の老若男女
  • 開発のきっかけ:事務の自動化のため
  • 2021年度から中学の教科書で扱うことに。

公式サイトでは簡易エディタがあり、実際に触ってみることができます。
なでしこ:日本語プログラミング言語

他の人がなでしこを使って作ったプログラムも見ることができます。
🍯 なでしこ3貯蔵庫

私がコラム内で特に日本語プログラミング言語の意義として一番いいなと思ったのは下記です。

現在プログラミング入門として,Scratchなどビジュアルプログラミング言語が用いられています.しかしビジュアルプログラミング言語から,本格的なプログラミング言語に移行するには大きな壁があります.そこで,クッションとして日本語プログラミング言語を使っていただければと思います.

私もビジュアルプログラミング言語プログラミング言語には大きな壁があると思っています。
その壁によって、せっかく楽しいと思えたプログラミングへの興味が折られてしまったらもったいないと感じていました。
なでしこによってその差が埋められたらいいですよね。

自作プログラミング言語って?

プログラミング言語の作り方についてあまり知らなかったのでこの機会に調べてみました。
世の中には当然のように自作プログラミング言語界隈があるようで、これもまた深い沼のような雰囲気がありました…

自作する目的としては下記があるようです。

  • 既存よりいい言語を作りたい
  • 独自のアプリ用の言語が欲しい
  • とにかく作ってみたい

結局は「作ってみたい」という情熱がすべてな気がしますね。

作る流れ

大雑把に流れを書くと大体こんな感じではないかと。
f:id:mitsunooon:20210605152902p:plain

字句解析

ソースコードを意味のある単語(トークン)に分割します。
この説明はこちらのサイト様の説明がわかりやすいです。
プログラミング言語を作る/yaccとlex

ちなみに、なでしこでは助詞でトークンを区切ることで、引数を逆転させても意味が通るような工夫がされているそうです。

構文解析

字句解析したトークンとプログラミング言語の文法から構文木を作ります。
なぜ木構造なのというところの理解がふわっとしており、文字に書き起こせないのでもう少し考えてから書きたいと思います。
構文解析は研究が盛んなようで、ツールが言語によっていろいろあるそうです。
例)yacc(C言語)、JavaCC(Java)

言語処理

上記の解析たちではルールを決めた段階です。
その決めたルールを実行するソフトウェア的なものが必要になります。
インタプリタ形式やコンパイラ形式など手法があり、それによって作り方が変わります。
プログラミング言語を作ったことのある人に話を聞いたところ、この段階がとても大変だったと言っていました。

おまけ

インタプリタ形式の特徴

コンパイラ形式の特徴

おわりに

1時間でプログラミング言語を作る!みたいな記事を書いてくださっている方もいたりするので、本当はちょっと作ってみるまでやってみたかったのですがとても至らず…
作っている方々は楽しそうなので、自作プログラミング言語の勉強会などあれば、怖いもの見たさで少し覗いてみたいなという気持ちになりました。