狠狠撸

狠狠撸Share a Scribd company logo
第10回
形式言語理論
1. 形式言語とは
2. 字句解析
1
Introduction to Automata Theory, Languages, and Computation
John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman (著)
ISBN: 9780321455369
画像は https://www.amazon.co.jp/dp/0321455363 より引用
10-1形式言語とは
2
形式言語とは
あるアルファベット Σ の上で、ある定められた文法によって規定される記号列の集合の
こと。文法には次のような種類がある
● 正則表現 (Regular Expression)
● 文脈自由文法 (Context-Free Grammar)
● 文脈依存文法 (Context-Dependent Grammar)
ここでいうアルファベットとは、文法で利用できる記号 (トークン) のこと
アルファベットの例:
● 0-9, “-” … 電話番号
● 0-9, a-z, A-Z, その他の記号 … プログラミング言語で用いるアルファベット
3
形式言語を学ぶ意義
コンパイラの手順には
● 字句解析 (Lexical Analysis)
● 構文解析 (Syntactic Analysis)
● 中間言語生成 (Intermediate Language Generation)
● 最適化 (Optimization)
● コード出力 (Code Emit)
などの複数のプロセスが存在する
形式言語がかかわる分野
4
計算機が言語を解釈するには
● 字句解析 (Lexical Analysis)
文字列を先頭から解釈しトークン (意味のある単語) として判断していく処理
● 構文解析 (Syntactic Analysis)
字句解析が終わった後、トークン列になった文字列に対し、文法を解釈し
n e w KEYWORD(New)
n e w IDENT(news)s
KEYWORD(IF) LPR IDENT RPR LBR
IfStatement
...
( LPR
5
IDENT
逆ポーランド記法 (RPN)
二項演算子からなる式について、演算子の優先順位を考慮しなくてもよい文法。後置記
法とも
DFS で構文木を訪問したとき、帰りがけ順で見ていくと、RPN になる
ポーランド記法 + * 5 4 / - 3 2 1
中置記法 5 * 4 + (3 - 2) / 1
逆ポーランド記法 5 4 * 3 2 - 1 / + 3 2
- 15 4
/*
+
6
RPN における計算
逆ポーランド記法における計算は、スタック マシンを利用する
被演算子を読んだらスタックに push する。演算子を読んだらスタックから pop し、演算
結果を push する。スタックのトップ (一番上) に残った値が計算結果
5 4 * 3 2 - 1 / +
5 5
4
20 20
3
20
3
2
20
1
20
1
1
20
1
21
7
[課題] 中置記法を RPN に変換する
中置記法で記述されたプログラムを、逆ポーランド記法に変換するプログラムを作成せ
よ。次の演算子を用いること: +, -, *, /, ^ (加減乗除および累乗)
また、逆ポーランド記法で変換された数式について、その値を計算せよ
8
バッカス?ナウア記法 (BNF)
バッカス?ナウア記法 (Backus-Naur form, BNF) は、プログラミング言語などの構文を
表すのに頻繁に用いる表現方法の一種。導出規則を用いて、トークンの定義を再帰的
に行う
<func-decl> ::= <type-name> <identifier> "(" <parameters> ")" <block>
<parameters> ::= <parameter> |
<parameters> "," <parameter>
<parameter> ::= <type-name> <identifier>
<block> ::= "{" <block> "}"
…
RFC や ASN.1 などでも、BNF やそれに類似された記法を用いて文法を定義する
9
導出木 (Derivation Tree)
BNF のように、導出規則を用いて定義する言語の場合、その導出関係を木構造にて描
画することができる
func-decl
type-name identifier parameters
parameters parameter
parameters parameter
block
block statement
identifier operator
statement
identif
10
あいまいな文法
あいまいな文法も存在する。
異なる解釈が存在した場合に、
どちらを優先させるかのルール
を作成することが重要である
例:
S → T | x
T → S + S
S
T
T x
x x
S
T
x T
x x
11
あいまいな文法
1. 演算子の優先順位による解決
S → T | x
T → S + S | S * S
に対して x + x * x を入力した場合 
* の優先順位を高くするなどの対応が必要
2. 最長マッチによる解決
Cond → if X then X | if X then X else X
に対して次の入力をした場合
if A then if B then C else D
12
10-2字句解析
13
有限オートマトン (Finite Automaton, FA, DFA)
有限状態機械 (FSM) とも呼ぶ
● 状態の有限集合 Q
● アルファベット ∑
● 開始状態 q0
● 終了状態の集合 F
● 状態遷移関数 δ(q,x) = q’
によって定義される
慣習的に、初期状態は入り矢印で、終状態は二重円で示す
例 (3 の倍数を受理するオートマトン )
Q = { q0
,q1
,q2
}
∑ = { 0,1 }
F = { q0
}
δ(q0
,0) = q0
δ(q0
,1) = q1
δ(q1
,0) = q2
δ(q1
,1) = q0
δ(q2
,0) = q1
δ(q2
,1) = q2
q2
q0
q1
1
01
01
0
14
ある言語 L が有限オートマトン A によって受理されるとは、集合 L に属する任意の文
字列 x を A から遷移させた結果、A の終状態に遷移することを言う
言語の受理
q0
F
携帯電話番号を受理するオートマトン (例):
0 0-9 0-9
0-9
0-9 0-9
1-9,-
-
-
- - - -
15
E
0-9,-
0-9,-
非決定性有限オートマトン (NFA)
ある状態から別の状態への遷移規則が複数存在するような有限オートマトンのことを非
決定性有限オートマトン (NFA)と呼ぶ。NFA は容易に DFA に変換可能
q1
1
q0
0
0,1
0 0
0
1
0
16
1
{q0
} {q1
}
{q0
,
q1
}
変換
1
1
ε 動作付き非決定性有限オートマトン (ε-NFA)
長さ 0 の文字列のことを空言と呼び、便宜上 ε という記号にて定義する。NFA のうち、ε
による遷移 (ε 遷移) を持つものを ε 動作付き非決定性有限オートマトン (ε-NFA) と呼
ぶ。ε-NFA は容易に DFA に変換可能
q1
ε
q0
0
0,1
0 0
17
{q1
}
変換
{q0
,
q1
}
1
0
正則表現 (Regular Expression)
あるアルファベット ∑ 上に、次の 5 つの記号を加えた文法。正规表现とも
● Φ : 空文字列
● + : 正則表現の選択
● * : 正則表現の繰り返し
● ( ) : それぞれ正則表現を括るための記号
プログラミングで用いる正规表现と呼ぶものと文法が異なるので注意
18
正則表現の ε-NFA への変換
1. Φ
2. a
3. ab
4. a+b
5. a*
a
a
b
ε
ε
ε
a
b
ε
εε
ε
a
ε
ε
ε
19
第10回 まとめ
1. 形式言語とは
● 計算機による言語の解釈について
● コンパイラにおけるプロセス: 字句解析, 構文解析
● 導出木, あいまいな文法
2. 字句解析
● 有限オートマトン (DFA)
● 言語の受理
● 非決定性有限オートマトン (NFA), ε 動作付き NFA (ε-NFA)
● 正則表現
20

More Related Content

What's hot (20)

非正格関数に対して适用可能な融合変换
非正格関数に対して适用可能な融合変换非正格関数に対して适用可能な融合変换
非正格関数に対して适用可能な融合変换
Masahiro Sakai
?
Fast approximate search in large dictionaries
Fast approximate search in large dictionariesFast approximate search in large dictionaries
Fast approximate search in large dictionaries
Yusuke Matsubara
?
颁言语讲习会4
颁言语讲习会4颁言语讲习会4
颁言语讲习会4
odenhadengaku
?
颁言语讲习会2
颁言语讲习会2颁言语讲习会2
颁言语讲习会2
odenhadengaku
?
Probabilistic Graphical Models 輪読会 Chapter5
Probabilistic Graphical Models 輪読会 Chapter5Probabilistic Graphical Models 輪読会 Chapter5
Probabilistic Graphical Models 輪読会 Chapter5
Daiki Shimada
?
颁言语讲习会3
颁言语讲习会3颁言语讲习会3
颁言语讲习会3
odenhadengaku
?
Levenshtein Automata
Levenshtein AutomataLevenshtein Automata
Levenshtein Automata
Masahiro Honma
?
颁言语讲习会1
颁言语讲习会1颁言语讲习会1
颁言语讲习会1
odenhadengaku
?
.狈贰罢系开発者から见た闯补惫补
.狈贰罢系开発者から见た闯补惫补.狈贰罢系开発者から见た闯补惫补
.狈贰罢系开発者から见た闯补惫补
bleis tift
?
轮讲?卒论にむけての尝补罢别齿入门
轮讲?卒论にむけての尝补罢别齿入门轮讲?卒论にむけての尝补罢别齿入门
轮讲?卒论にむけての尝补罢别齿入门
Toshiaki Hashimoto
?
1+1=2の话
1+1=2の话1+1=2の话
1+1=2の话
明洋 庄司
?
1+1=2の话(coinsのOCのLTで話したやつ)
1+1=2の话(coinsのOCのLTで話したやつ)1+1=2の话(coinsのOCのLTで話したやつ)
1+1=2の话(coinsのOCのLTで話したやつ)
明洋 庄司
?
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
Kazuyuki TAKASE
?
111127.lsj143.田川 japanese conjugation and dm
111127.lsj143.田川 japanese conjugation and dm111127.lsj143.田川 japanese conjugation and dm
111127.lsj143.田川 japanese conjugation and dm
Takumi Tagawa
?
正规表现
正规表现正规表现
正规表现
bsdhack
?
ストーリーテリング?アルゴリズムの论文绍介と拟似実装(飞辞谤诲2惫别肠の応用)
ストーリーテリング?アルゴリズムの论文绍介と拟似実装(飞辞谤诲2惫别肠の応用)ストーリーテリング?アルゴリズムの论文绍介と拟似実装(飞辞谤诲2惫别肠の応用)
ストーリーテリング?アルゴリズムの论文绍介と拟似実装(飞辞谤诲2惫别肠の応用)
Tyee Z
?
定理証明言语によるハードウェア検証
定理証明言语によるハードウェア検証定理証明言语によるハードウェア検証
定理証明言语によるハードウェア検証
Shunji Nishimura
?
言语処理系入门?7
言语処理系入门?7言语処理系入门?7
言语処理系入门?7
Kenta Hattori
?
非正格関数に対して适用可能な融合変换
非正格関数に対して适用可能な融合変换非正格関数に対して适用可能な融合変换
非正格関数に対して适用可能な融合変换
Masahiro Sakai
?
Fast approximate search in large dictionaries
Fast approximate search in large dictionariesFast approximate search in large dictionaries
Fast approximate search in large dictionaries
Yusuke Matsubara
?
Probabilistic Graphical Models 輪読会 Chapter5
Probabilistic Graphical Models 輪読会 Chapter5Probabilistic Graphical Models 輪読会 Chapter5
Probabilistic Graphical Models 輪読会 Chapter5
Daiki Shimada
?
.狈贰罢系开発者から见た闯补惫补
.狈贰罢系开発者から见た闯补惫补.狈贰罢系开発者から见た闯补惫补
.狈贰罢系开発者から见た闯补惫补
bleis tift
?
轮讲?卒论にむけての尝补罢别齿入门
轮讲?卒论にむけての尝补罢别齿入门轮讲?卒论にむけての尝补罢别齿入门
轮讲?卒论にむけての尝补罢别齿入门
Toshiaki Hashimoto
?
1+1=2の话(coinsのOCのLTで話したやつ)
1+1=2の话(coinsのOCのLTで話したやつ)1+1=2の话(coinsのOCのLTで話したやつ)
1+1=2の话(coinsのOCのLTで話したやつ)
明洋 庄司
?
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
Kazuyuki TAKASE
?
111127.lsj143.田川 japanese conjugation and dm
111127.lsj143.田川 japanese conjugation and dm111127.lsj143.田川 japanese conjugation and dm
111127.lsj143.田川 japanese conjugation and dm
Takumi Tagawa
?
正规表现
正规表现正规表现
正规表现
bsdhack
?
ストーリーテリング?アルゴリズムの论文绍介と拟似実装(飞辞谤诲2惫别肠の応用)
ストーリーテリング?アルゴリズムの论文绍介と拟似実装(飞辞谤诲2惫别肠の応用)ストーリーテリング?アルゴリズムの论文绍介と拟似実装(飞辞谤诲2惫别肠の応用)
ストーリーテリング?アルゴリズムの论文绍介と拟似実装(飞辞谤诲2惫别肠の応用)
Tyee Z
?
定理証明言语によるハードウェア検証
定理証明言语によるハードウェア検証定理証明言语によるハードウェア検証
定理証明言语によるハードウェア検証
Shunji Nishimura
?
言语処理系入门?7
言语処理系入门?7言语処理系入门?7
言语処理系入门?7
Kenta Hattori
?

More from Yuto Takei (20)

51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
Yuto Takei
?
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門
Yuto Takei
?
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
Yuto Takei
?
开発チームにおける多様性のススメ
开発チームにおける多様性のススメ开発チームにおける多様性のススメ
开発チームにおける多様性のススメ
Yuto Takei
?
ブロックチェーン神話に迫る - 本当に使える? 使えない?
 ブロックチェーン神話に迫る - 本当に使える? 使えない? ブロックチェーン神話に迫る - 本当に使える? 使えない?
ブロックチェーン神話に迫る - 本当に使える? 使えない?
Yuto Takei
?
ブロックチェーン技术者が梦见る未来
ブロックチェーン技术者が梦见る未来ブロックチェーン技术者が梦见る未来
ブロックチェーン技术者が梦见る未来
Yuto Takei
?
ブロックチェーン技术の课题と社会応用
ブロックチェーン技术の课题と社会応用ブロックチェーン技术の课题と社会応用
ブロックチェーン技术の课题と社会応用
Yuto Takei
?
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
Yuto Takei
?
ブロックチェーンの不动产登记への応用に関する検讨
ブロックチェーンの不动产登记への応用に関する検讨ブロックチェーンの不动产登记への応用に関する検讨
ブロックチェーンの不动产登记への応用に関する検讨
Yuto Takei
?
51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
Yuto Takei
?
[Intermediate 04] ブロックチェーンの動作原理
[Intermediate 04] ブロックチェーンの動作原理[Intermediate 04] ブロックチェーンの動作原理
[Intermediate 04] ブロックチェーンの動作原理
Yuto Takei
?
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
Yuto Takei
?
[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について
Yuto Takei
?
[Intermediate 01] イントロダクション / Bitcoin を動作させる
[Intermediate 01] イントロダクション / Bitcoin を動作させる[Intermediate 01] イントロダクション / Bitcoin を動作させる
[Intermediate 01] イントロダクション / Bitcoin を動作させる
Yuto Takei
?
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
Yuto Takei
?
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
Yuto Takei
?
[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力
Yuto Takei
?
[Basic 12] 関数型言語 / 型理論
[Basic 12] 関数型言語 / 型理論[Basic 12] 関数型言語 / 型理論
[Basic 12] 関数型言語 / 型理論
Yuto Takei
?
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御
Yuto Takei
?
[Basic 8] フ?ロセスとスレット? / 入出力 / シェル
[Basic 8] フ?ロセスとスレット? / 入出力 / シェル[Basic 8] フ?ロセスとスレット? / 入出力 / シェル
[Basic 8] フ?ロセスとスレット? / 入出力 / シェル
Yuto Takei
?
51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
Yuto Takei
?
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門
Yuto Takei
?
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
Yuto Takei
?
开発チームにおける多様性のススメ
开発チームにおける多様性のススメ开発チームにおける多様性のススメ
开発チームにおける多様性のススメ
Yuto Takei
?
ブロックチェーン神話に迫る - 本当に使える? 使えない?
 ブロックチェーン神話に迫る - 本当に使える? 使えない? ブロックチェーン神話に迫る - 本当に使える? 使えない?
ブロックチェーン神話に迫る - 本当に使える? 使えない?
Yuto Takei
?
ブロックチェーン技术者が梦见る未来
ブロックチェーン技术者が梦见る未来ブロックチェーン技术者が梦见る未来
ブロックチェーン技术者が梦见る未来
Yuto Takei
?
ブロックチェーン技术の课题と社会応用
ブロックチェーン技术の课题と社会応用ブロックチェーン技术の课题と社会応用
ブロックチェーン技术の课题と社会応用
Yuto Takei
?
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
Yuto Takei
?
ブロックチェーンの不动产登记への応用に関する検讨
ブロックチェーンの不动产登记への応用に関する検讨ブロックチェーンの不动产登记への応用に関する検讨
ブロックチェーンの不动产登记への応用に関する検讨
Yuto Takei
?
51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
Yuto Takei
?
[Intermediate 04] ブロックチェーンの動作原理
[Intermediate 04] ブロックチェーンの動作原理[Intermediate 04] ブロックチェーンの動作原理
[Intermediate 04] ブロックチェーンの動作原理
Yuto Takei
?
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
Yuto Takei
?
[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について
Yuto Takei
?
[Intermediate 01] イントロダクション / Bitcoin を動作させる
[Intermediate 01] イントロダクション / Bitcoin を動作させる[Intermediate 01] イントロダクション / Bitcoin を動作させる
[Intermediate 01] イントロダクション / Bitcoin を動作させる
Yuto Takei
?
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
Yuto Takei
?
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
Yuto Takei
?
[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力
Yuto Takei
?
[Basic 12] 関数型言語 / 型理論
[Basic 12] 関数型言語 / 型理論[Basic 12] 関数型言語 / 型理論
[Basic 12] 関数型言語 / 型理論
Yuto Takei
?
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御
Yuto Takei
?
[Basic 8] フ?ロセスとスレット? / 入出力 / シェル
[Basic 8] フ?ロセスとスレット? / 入出力 / シェル[Basic 8] フ?ロセスとスレット? / 入出力 / シェル
[Basic 8] フ?ロセスとスレット? / 入出力 / シェル
Yuto Takei
?

[Basic 10] 形式言語 / 字句解析