韓国語で書くプログラミング言語 kol
(github.com/smc0478)こんにちは。
韓国語で書くプログラミング言語を作りました。
制作理由
- Umjunsik-lang や Aheui のような、ハングルで書くプログラミング言語を見て、韓国語で自然にコーディングしてみたくなりました。
- 将来きちんとした言語を作るための勉強です。
インストール
pip install korean-lang
文法の種類
以下で紹介するような文法を作りました。
詳しくは私の GitHub リンクを参照してください。
出力
"annyeong sesang!"を出力する。
変数
- 変数名はハングル(kiyeok のようなものは不可です)、
_、数字で構成されています。 - 変数には整数、文字列、配列、辞書などを入れられます。
jeongsuneun 1i doenda.
sosuneun 3.141592ga doenda.
ireumeun "Hong Gildong"i doenda.
chamgapseun chami doenda.
bingapseun eopseumi doenda.
sutja_baeyeoreun [1 daeum 2 daeum 3 daeum 4]i doenda.
saram_jeongboneun {"ireum"eun "Gim Cheolsu" tto "nai"neun 25}i doenda.
条件
man-yak ... imyeon/myeon、anigo man-yak ... imyeon/myeon、animyeon ... imyeon/myeonは if、else if、else のように動作し、daeum ... mundaneul silhaenghanda.を実行します。
nai-neun ibryeokhan geoseul jeongsuro_byeonhan geosi doenda.
man-yak nai-ga 18boda keugeona gatdamyeon daeum
"seonginimnida."reul chulryeokhanda.
mundaneul silhaenghanda.
anigo man-yak nai-ga 13boda keuda tto-neun nai-ga 13rang gatdamyeon daeum
"cheongsonyeonimnida."reul chulryeokhanda.
mundaneul silhaenghanda.
animyeon daeum
"eoriniimnida."reul chulryeokhanda.
mundaneul silhaenghanda
繰り返し文
gyesok ... in donganはwhileに近く、daeum ... mundaneul banbokhanda.を実行します。...e inneun gak hangmokdeureul ...ro gajyeowaはfor ... in ...で、daeum ... mundaneul banbokhanda.を実行します。
sutjaneun 0i doenda.
gyesok sutjaga 5boda jakdain dongan daeum
sutjareul chulryeokhanda.
sutjaneun sutjawa 1eul deohan geosi doenda.
mundaneul banbokhanda.
baeyeoreun [10 daeum 20 daeum 30]i doenda.
baeyeore inneun gak hangmokdeureul sutjaro gajyeowa daeum
sutjareul chulryeokhanda.
mundaneul banbokhanda.
関数
hamsu ...neun (...gwa ...ro)が関数を定義する部分で、daeum ... mundaneul silhaenghanda.が関数の実行部分です。...gwa/wa ...eul/reul ... ro/euro ...handa./da.のように関数を呼び出します。
hamsu paektorieoreul_guhandaneun garo daeum
man-yak gaga 0irang gatdamyeon daeum
gyeolgwa gapseun 1i doenda. geurigo kkeutnanda.
mundaneul silhaenghanda.
gyeolgwa gapseun gawa ((gareul 1ro ppaen geot)euro paektorieoreul_guhan geot)eul gophan geosi doenda.
geurigo kkeutnanda.
mundaneul silhaenghanda.
4ro paektorieoreul_guhan geoseul chulryeokhanda.
構造体
- 構造体は C 言語の struct に似ています。
gujo sarameun daeum
byeonsu ireumi itda.
byeonsu naiga itda.
gapseul gajinda.
Cheolsuneun sarami doenda.
Cheolsuui ireumeun "Cheolsuda"ga doenda.
Cheolsuui ireumeul chulryeokhanda.
クラス
yuhyeongは他の言語でいうクラスです。
yuhyeong dongmureun daeum
byeonsu ireumi itda.
hamsu sorireul_naendaneun daeum
dongmurui ireumgwa "i(ga) sorireul naemnida."reul deohan geoseul chulryeokhanda.
mundaneul silhaenghanda.
gapseul gajinda.
Gangajineun dongmuri doenda.
Gangajiui ireumeun "Badugi"ga doenda.
Gangaji aneseo sorireul_naenda.
惜しい点
- 配列のように、韓国語として自然ではないぎこちない文法があり、その点は残念です。
- class を韓国語で
yuhyeongと訳してはいますが、これより良い単語がありそうなので、後で見つかったら変えようと思っています。
まとめ
役に立つものでもなく、内部コードも2週間で急いで書いたのでかなり雑ですが、楽しく見てもらえれば嬉しいです。
読んでいただきありがとうございました。
29件のコメント
本当に素晴らしいと思います!応援しています。
ありがとうございます。
韓国語をプログラミング言語として採用しようという試みは、コミュニティレベルでこれまでも続いてきたのですが、これを思い出したのでリンクを貼っておきます。笑
https://namu.wiki/w/%EC%B0%BD%EC%A1%B0(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EC%96%B8%EC%96%B4)
作って調べてみると、面白い試みがたくさんありました。
印象深かったものの一つが下のリンクで、数字もハングルで表現していて面白かったです。
https://github.com/recu3125/malC_lang
英語や数学に慣れていない人向けの教育用としても、とても良いと思います。
if、for、while、=などの記号なしで、ハングルで計算論的思考をうまく説明できるのは、教育的に非常に大きな利点だと思います。とても素晴らしいアイデアだと思います!
ありがとうございます。確かに韓国語だと、英語よりも読みやすい部分もあるように思います。
配列は、あえて
次というデリミタを使わずに、comma を使ってもよかった気がします。そして、配列が構造体/クラス、配列、あるいは辞書も含められる構造なのかが気になります。
当時の目標は本当にハングルだけを使って、できるだけ英語や句読点は排除しようということだったので使わなかったのですが、やはりカンマは入れたほうがより自然になりそうです。後で追加してみようと思います。
そして配列は、すべての型のデータを格納できる構造として設計しました。できないならバグです。T_T
面白いですね
ありがとうございます。
面白いですね。良いインスピレーションが湧いたので、サイドプロジェクトとしてやってみようと思います。
いいですね。期待しています。
おお.. 応援しています
ありがとうございます。
+-=$&のような特殊文字を他の言語より少なく使っているのがいいですね。小型の携帯機器のキーボードでは特殊文字の入力が大変ですから。おお、そういう利点があるんですね。ありがとうございます。
とても良いです…
ありがとうございます。
個人的な好みの違いかもしれませんが、「になる」より「である」のほうが良かった気がします。
もともと初期のころは、変数代入は
가는 ~だ。でした。ですが開発するときに「~だ/da」を関数呼び出しにも使っていたため、式のパースが曖昧になってしまい、「なる」に変えました。後で「~だ」としてパースできるようにすることも試してみようと思います。そうですね、関数呼び出しは「〜する」べきな気がします(笑)
よく読みました。
ありがとうございます。
大学のコンパイラの授業時間に似たようなものをやっていた記憶がよみがえりますね。
まだ学んでいませんが、楽しみですね。
おや、lexer や parser のファイル名を見ると、コンパイラを勉強されたように見えますが、違うのでしょうか?
あ、私はまだ大学3年生で、コンパイラの授業もまだ受けておらず、独学で作ったものでもありますし、素早く作ろうとして自己流で学習して開発したので、そうなっています。
すてきな試みですね!! 面白いです(笑)
自然に表現するために、かなり悩んで工夫されたのだろうという感じがします。
ありがとうございます。