Submit Search
Upload
プログラミング言語を作る
•
0 likes
•
827 views
Masaya Konishi
Follow
合同勉強会 in 大都会岡山 -2018 Winter- にて、LISP系のインタプリタ型言語を作った話をしました。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 18
Download now
Download to read offline
Recommended
210917 オープンセミナー@広島のこれまでとこれから
210917 オープンセミナー@広島のこれまでとこれから
Takuya Nishimoto
PHP Matsuri2013でなにをしたか?
PHP Matsuri2013でなにをしたか?
Shintaro Okamatsu
Perl6 と web 開発と
Perl6 と web 開発と
Tokuhiro Matsuno
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
健太 田上
Shinyユーザのための非同期プログラミング入門
Shinyユーザのための非同期プログラミング入門
hoxo_m
Mix leaplt#12登壇資料
Mix leaplt#12登壇資料
NakamuraHien
211020 すごい広島 with OSH 2021.10
211020 すごい広島 with OSH 2021.10
Takuya Nishimoto
SICPの紹介
SICPの紹介
Nisei Kimura
Recommended
210917 オープンセミナー@広島のこれまでとこれから
210917 オープンセミナー@広島のこれまでとこれから
Takuya Nishimoto
PHP Matsuri2013でなにをしたか?
PHP Matsuri2013でなにをしたか?
Shintaro Okamatsu
Perl6 と web 開発と
Perl6 と web 開発と
Tokuhiro Matsuno
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
健太 田上
Shinyユーザのための非同期プログラミング入門
Shinyユーザのための非同期プログラミング入門
hoxo_m
Mix leaplt#12登壇資料
Mix leaplt#12登壇資料
NakamuraHien
211020 すごい広島 with OSH 2021.10
211020 すごい広島 with OSH 2021.10
Takuya Nishimoto
SICPの紹介
SICPの紹介
Nisei Kimura
Writing One Liner by Golang(Japanese)
Writing One Liner by Golang(Japanese)
kuwa1 桑島
Keynoteを使った画像作成 for 関モバ9
Keynoteを使った画像作成 for 関モバ9
studioshin
いわみくとMeetup第15回
いわみくとMeetup第15回
Satomi Tsujita
ソースコードをAAに変換するやつやってみた
ソースコードをAAに変換するやつやってみた
Takahashi Koki
リーガルテックへ凸って見えた楽しい踊り方
リーガルテックへ凸って見えた楽しい踊り方
Katsuhiro Honda
Ruby confchina impression
Ruby confchina impression
Kosuke Masumitsu
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島
Tomohiko Himura
地方フリーランスとして ゆるいチームで生き抜いてる話
地方フリーランスとして ゆるいチームで生き抜いてる話
Tomoe Sawai
第二回東海北陸ロボコン交流会 豊田高専プレゼン
第二回東海北陸ロボコン交流会 豊田高専プレゼン
東海北陸ロボコン 交流会
2017/06/30 色を付けて幸せになろう sago35
2017/06/30 色を付けて幸せになろう sago35
Masaaki Takasago
○○したら受託開発が180°変わった(10分版)
○○したら受託開発が180°変わった(10分版)
Atsushi Harada
Ciecleci
Ciecleci
YosukeHojo
Jissou
Jissou
Ken Ogura
Ruby with My Life
Ruby with My Life
Hiroshi SHIBATA
関東地方で北海道を味わおう~上京した皆様へ~
関東地方で北海道を味わおう~上京した皆様へ~
洋史 東平
括弧を使わないLispプログラミング
括弧を使わないLispプログラミング
Yuta Mizushima
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
文樹 高橋
Easy easy2
Easy easy2
ssuser944f29
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
Takayuki Shimizukawa
ブラウザでかんたんプログラミング!さらにお手軽に体験できるようになった日本語プログラミング言語「なでしこ」最新情報のご紹介
ブラウザでかんたんプログラミング!さらにお手軽に体験できるようになった日本語プログラミング言語「なでしこ」最新情報のご紹介
Masaya Hayashi
Sphinxを使って本を書こう #pyconjp 2012
Sphinxを使って本を書こう #pyconjp 2012
Takayuki Shimizukawa
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
Toshiaki Maki
More Related Content
What's hot
Writing One Liner by Golang(Japanese)
Writing One Liner by Golang(Japanese)
kuwa1 桑島
Keynoteを使った画像作成 for 関モバ9
Keynoteを使った画像作成 for 関モバ9
studioshin
いわみくとMeetup第15回
いわみくとMeetup第15回
Satomi Tsujita
ソースコードをAAに変換するやつやってみた
ソースコードをAAに変換するやつやってみた
Takahashi Koki
リーガルテックへ凸って見えた楽しい踊り方
リーガルテックへ凸って見えた楽しい踊り方
Katsuhiro Honda
Ruby confchina impression
Ruby confchina impression
Kosuke Masumitsu
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島
Tomohiko Himura
地方フリーランスとして ゆるいチームで生き抜いてる話
地方フリーランスとして ゆるいチームで生き抜いてる話
Tomoe Sawai
第二回東海北陸ロボコン交流会 豊田高専プレゼン
第二回東海北陸ロボコン交流会 豊田高専プレゼン
東海北陸ロボコン 交流会
2017/06/30 色を付けて幸せになろう sago35
2017/06/30 色を付けて幸せになろう sago35
Masaaki Takasago
○○したら受託開発が180°変わった(10分版)
○○したら受託開発が180°変わった(10分版)
Atsushi Harada
Ciecleci
Ciecleci
YosukeHojo
Jissou
Jissou
Ken Ogura
Ruby with My Life
Ruby with My Life
Hiroshi SHIBATA
関東地方で北海道を味わおう~上京した皆様へ~
関東地方で北海道を味わおう~上京した皆様へ~
洋史 東平
What's hot
(15)
Writing One Liner by Golang(Japanese)
Writing One Liner by Golang(Japanese)
Keynoteを使った画像作成 for 関モバ9
Keynoteを使った画像作成 for 関モバ9
いわみくとMeetup第15回
いわみくとMeetup第15回
ソースコードをAAに変換するやつやってみた
ソースコードをAAに変換するやつやってみた
リーガルテックへ凸って見えた楽しい踊り方
リーガルテックへ凸って見えた楽しい踊り方
Ruby confchina impression
Ruby confchina impression
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島
地方フリーランスとして ゆるいチームで生き抜いてる話
地方フリーランスとして ゆるいチームで生き抜いてる話
第二回東海北陸ロボコン交流会 豊田高専プレゼン
第二回東海北陸ロボコン交流会 豊田高専プレゼン
2017/06/30 色を付けて幸せになろう sago35
2017/06/30 色を付けて幸せになろう sago35
○○したら受託開発が180°変わった(10分版)
○○したら受託開発が180°変わった(10分版)
Ciecleci
Ciecleci
Jissou
Jissou
Ruby with My Life
Ruby with My Life
関東地方で北海道を味わおう~上京した皆様へ~
関東地方で北海道を味わおう~上京した皆様へ~
Similar to プログラミング言語を作る
括弧を使わないLispプログラミング
括弧を使わないLispプログラミング
Yuta Mizushima
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
文樹 高橋
Easy easy2
Easy easy2
ssuser944f29
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
Takayuki Shimizukawa
ブラウザでかんたんプログラミング!さらにお手軽に体験できるようになった日本語プログラミング言語「なでしこ」最新情報のご紹介
ブラウザでかんたんプログラミング!さらにお手軽に体験できるようになった日本語プログラミング言語「なでしこ」最新情報のご紹介
Masaya Hayashi
Sphinxを使って本を書こう #pyconjp 2012
Sphinxを使って本を書こう #pyconjp 2012
Takayuki Shimizukawa
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
Toshiaki Maki
Pythonで始める競技プログラミング
Pythonで始める競技プログラミング
shunki fujiwara
LL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrinting
Naruhiko Ogasawara
PyPy 紹介
PyPy 紹介
shoma h
利根川講演@北海道20170113
利根川講演@北海道20170113
Yuta Tonegawa
二求の塾 プログラミング講座(2019-08-10)
二求の塾 プログラミング講座(2019-08-10)
Atsuo Yamasaki
オープンソースのスクリーンリーダーNVDAとLibreOffice
オープンソースのスクリーンリーダーNVDAとLibreOffice
Takuya Nishimoto
Goで始める言語処理系実装入門
Goで始める言語処理系実装入門
虎の穴 開発室
西区勉強会用スライド
西区勉強会用スライド
Hiromi Kai
プログラミングのことはじめ 互助会 20160507 バージョン
プログラミングのことはじめ 互助会 20160507 バージョン
Manabu Murakami
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
IPAmj明朝の漢字を検索
IPAmj明朝の漢字を検索
Ryusei Yamaguchi
RvizPlugin作成入門
RvizPlugin作成入門
Sho Takahashi
プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会
nemumu
Similar to プログラミング言語を作る
(20)
括弧を使わないLispプログラミング
括弧を使わないLispプログラミング
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
Easy easy2
Easy easy2
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
ブラウザでかんたんプログラミング!さらにお手軽に体験できるようになった日本語プログラミング言語「なでしこ」最新情報のご紹介
ブラウザでかんたんプログラミング!さらにお手軽に体験できるようになった日本語プログラミング言語「なでしこ」最新情報のご紹介
Sphinxを使って本を書こう #pyconjp 2012
Sphinxを使って本を書こう #pyconjp 2012
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
Pythonで始める競技プログラミング
Pythonで始める競技プログラミング
LL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrinting
PyPy 紹介
PyPy 紹介
利根川講演@北海道20170113
利根川講演@北海道20170113
二求の塾 プログラミング講座(2019-08-10)
二求の塾 プログラミング講座(2019-08-10)
オープンソースのスクリーンリーダーNVDAとLibreOffice
オープンソースのスクリーンリーダーNVDAとLibreOffice
Goで始める言語処理系実装入門
Goで始める言語処理系実装入門
西区勉強会用スライド
西区勉強会用スライド
プログラミングのことはじめ 互助会 20160507 バージョン
プログラミングのことはじめ 互助会 20160507 バージョン
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
IPAmj明朝の漢字を検索
IPAmj明朝の漢字を検索
RvizPlugin作成入門
RvizPlugin作成入門
プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会
More from Masaya Konishi
ElasticBeanstalkでのRailsアプリ運用
ElasticBeanstalkでのRailsアプリ運用
Masaya Konishi
Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話
Masaya Konishi
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Masaya Konishi
FizzBuzzで学ぶRuby
FizzBuzzで学ぶRuby
Masaya Konishi
私とRubyの付き合い方 - 岡山Ruby会議02
私とRubyの付き合い方 - 岡山Ruby会議02
Masaya Konishi
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -
Masaya Konishi
rabbit - 第10回 岡山Ruby, Ruby on Rails勉強会
rabbit - 第10回 岡山Ruby, Ruby on Rails勉強会
Masaya Konishi
More from Masaya Konishi
(7)
ElasticBeanstalkでのRailsアプリ運用
ElasticBeanstalkでのRailsアプリ運用
Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
FizzBuzzで学ぶRuby
FizzBuzzで学ぶRuby
私とRubyの付き合い方 - 岡山Ruby会議02
私とRubyの付き合い方 - 岡山Ruby会議02
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -
rabbit - 第10回 岡山Ruby, Ruby on Rails勉強会
rabbit - 第10回 岡山Ruby, Ruby on Rails勉強会
Recently uploaded
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
Recently uploaded
(9)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
プログラミング言語を作る
1.
プログラミング言語を作る 合同勉強会in 大都会岡山 -2018
Winter-
2.
自己紹介 ● 小西 雅也 ●
株式会社クレオフーガ ○ インフラ & Webアプリケーション開発 ● @orepublic ● 勉強会 ○ Okayama.rb ○ 岡山システムプログラミング勉強会 ● 趣味 ○ OSの再インストール
3.
今日話すこと ● LISP系のプログラミング言語を作りました ● LISPとは ●
作るまで ○ 字句解析 ○ 構文解析(構文木構築) ○ 実行 目的 プログラミング言語自作にとりかかれるように
4.
なんで作るのか ● プログラミング言語作れるってかっこいい ● 自分で作れると知って以来、いつか作ってみたかった ●
いつかが一生来ない気がしてきたので、着手した
5.
プログラミング言語作りました
6.
プログラミング言語作りました ● mrubyでLISPライクな言語を実装 ● mrispと言います ●
インタプリタ型の言語です
7.
LISPとは ● リスト構造、木構造の式でプログラムを記述する(S式) ○ (*
3 (+ 2 5)) ○ ((fn* [a b] (- a b)) 100 50) ● リストの先頭が関数もしくは演算子 ● 続くリストが引数 ○ 引数も、さらにリスト構造になることもある ● 構文のルールが少ない
8.
プログラミング言語を作るまで ● 字句解析 ○ 入力の文字列をトークンに分解する ●
構文解析 ○ トークンの並びから、抽象構文木を作る ● 実行 ○ 抽象構文木を解釈して、実行していく
9.
字句解析 ● 入力文字列から言語の構文要素の最小単位に分解する ● 最小単位 ○
プログラミング言語の意味上、それ以上分解できない塊 ○ トークンと呼ぶ ○ 例) ■ ( + 1 3 ) → “(“ , “+” , “1” , “3” , “)” ■ (def! a 6) → “(“ , “def!” , “a” , “6” , “)” ○ スペース(空白)はトークンの区切りとしての意味はあるが、字句解析の段階で取り除かれる
10.
構文解析 ● トークンの並びを、ルールに従って解析して、構文木を作る ● 例) 入力 if
a==1 then print ‘aは1’ else print ‘aは1以外’ end ルール [a-z]* → 式 [0-9]* → 式 式 == 式 → 式 ‘xxxx’ → 式 if 式 then 式 else 式 end → if式 if 式 (a == 1) 式 (‘aは1’) 式 (‘aは1以外’)
11.
実行 ● 作成した構文木をたどって、実行していく if 式 (a ==
1) 式 (‘aは1’) 式 (‘aは1以外’)
12.
mrispの実装 ● make a
lisp (mal) ○ https://github.com/kanaka/mal ● 実装方法を説明するドキュメント ● 74の言語で実装されているソースコード付き ○ ドキュメント読んで、ピンと来なくても自分が得意な言語の実装例が見える ○ 各ステップの動作検証するテストコード付き ● mrispは、いまのところstep5 までの機能を実装 ○ 四則演算 ○ 変数定義 ○ 無名関数 ○ if ○ 再帰 ○ print
13.
mrispの実装(字句解析) ● 正規表現にて分解 ○ /[s,]*(~@|[[]{}()'`~^@]|"(?:.|[^"])*"|;.*|[^s[]{}('"`,;)]*)/ ○
マッチした文字列を、配列で取得 ○ この段階で不要な文字(空白)も取り除く ● 正規表現でうまくいかないパターンもある ○ 例) コメントのネスト ■ /* aaa /* bbb */ ccc*/ ○ mrispではコメントを扱っていない
14.
mrispの実装(構文解析) ● LISPはS式で記述 ● S式は、構文木の形をしている ●
例) if ○ (if (= a 1) (prn ‘aは1’) (prn ‘aは1以外’)) ● mrisp では、S式をそのままrubyの配列に変換している ○ [:if, [:=, a, 1], [:prn, ‘aは1’], [:prn ‘aは1以外’]] ● ルールが少なく、構文木に変換しやすい if 式 (= a 1) 式 (‘aは1’) 式 (‘aは1以外’)
15.
mrispの実装(実行) ● 配列を先頭から辿っていき、要素を見て実行(リストの先頭が演算子・関数) ● if,
def!, let*, fn* などは予約後 ● [:if, [:=, a, 1], [:prn, ‘aは1’], [:prn ‘aは1以外’]] ● 例) 実装の一部
16.
mrispの実装(実行) ● def! などの実行は、動的に連想配列に定義を追加 ●
例) (def! a 1) (def! b ( + 1 2)) env = { ‘a’: 1, ‘b’: 3, }
17.
まとめ ● LISP系言語を作りました ● LISP系インタプリタは作るハードル低い(と思う) ○
make a lisp 以外にも、たくさん情報がある ● 字句解析 ● 構文解析 ● 実行
18.
まとめ ● プログラミング言語を作ろう
Download now