Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
0 プログラミング⾔語を作る 2024-02-02 第27回NearMe技術勉強会 Takuma KAKINOUE
Slide 2
Slide 2 text
1 概要 ● インタプリタ型⾔語の動作原理を解説 ○ 字句解析 ○ 構⽂解析 ● 字句解析および構⽂解析ライブラリのPython Lex-Yacc (https://github.com/dabeaz/ply)を⽤いて,簡単な⾔語を作成する
Slide 3
Slide 3 text
2 インタプリタ型⾔語が実⾏される仕組み ● Step 1 : プログラムをブロックに分割する ○ このブロック単位で実⾏される ● Step 2 : 字句解析 ○ ブロック単位のプログラムをトークンへと分解する ● Step 3 : 構⽂解析 ○ トークンの羅列をBNFに当てはめ関係性を抽出し,構⽂解析⽊を⽣成する ● Step 4 : 実⾏ ○ 構⽂解析⽊をもとに,インタプリタで定義された動作が実⾏される ※ コンパイラ型⾔語の場合は,Step 4以降が異なり,「意味解析」→「コード⽣成」とい う処理が⾏われる。コンパイラは「実⾏」までは⾏わず,あくまで与えられたプログラム を機械語などの別のプログラムに変換することが⽬的である。
Slide 4
Slide 4 text
3 トークン(終端記号)とは ● プログラムの最⼩単位で,それ以上分割することができない記号のこと ● トークンの例 ○ 演算⼦ ■ +, -, *, /, = など ○ 予約語 ■ if, else, while, for, return など ○ 数値 ■ 0, 5, 100 など ○ 変数名や関数名 ■ my_var, my_func など
Slide 5
Slide 5 text
4 BNFとは ● プログラムの構⽂を定義するための記法のこと ○ 正式名称は,バッカス‧ナウア記法(Backus-Naur form) ● 記法の例 ○
⇨ 記号Aの宣⾔ ○
::=
⇨ AはBである(定義) ○
|
⇨ AまたはBである(選択) ● 構⽂の例 ○ 英数字の定義(<英字>と<数字>は終端記号,<英数字>は⾮終端記号となる) ■ <英字> ::= [a - z] | [A - Z] ■ <数字> ::= [0 - 9] ■ <英数字> ::= <英字> | <英数字> <数字> | <英数字> <英字>
Slide 6
Slide 6 text
5 ⾜し算と引き算を定義する ● トークン(終端記号)の定義 ○ <整数> ::= ([1 - 9] | [0 - 9]* ) | 0 ○ <演算⼦ > ::= + | - ● BNFの定義 ○ <式> ::= <整数> | <式> <演算⼦> <整数> ● “1 + 2”という式を解析する流れ ○ 1 + 2 ○ <整数> <演算⼦> <整数> → 1 + 2 ○ <式> <演算⼦> <整数> → 1 + 2 ○ <式> → 3(演算⼦を読み込み演算を実⾏)
Slide 7
Slide 7 text
6 問題 ● 以下の構⽂に合致するものはどれか?ただし、構⽂解析は最⻑⼀致で⾏われる。 ○ <動作> ::= ⾷べる | 捨てる | 投げる ○ <もの> ::= りんご | 雑草 | ボール ○ <命令> ::= <動作> | <動作> <もの> | <命令> <動作> | <命令> <動作> <もの> ● 選択肢 ○ (ア)ボール 投げる ⾷べる りんご ○ (イ)捨てる 雑草 ⾷べる りんご りんご ○ (ウ)⾷べる 雑草 りんご 捨てる ○ (エ)投げる ボール 投げる 投げる ボール
Slide 8
Slide 8 text
7 サンプルコードを動かす ● リポジトリをclone ○ https://github.com/kakky-hacker/algorithm_sandbox/tree/main/my-script ● main.pyを実⾏(今回はpip install不要) ○ インタプリタが⼊⼒待ち状態になるので,sample/code.txtをコピペする ○ ちゃんとコード通りの出⼒か検算してみる ● インタプリタで遊んでみる ○ 変数宣⾔や”()”を⽤いた四則演算も可能 ○ 代⼊⽂以外は,コンソールに結果が出⼒される
Slide 9
Slide 9 text
8 Thank you 解答(エ)