【けいしきげんご】

形式言語 とは?

💡 文法のルールで「正しい文」を厳密に決める、言語の数学理論
📌 このページのポイント
チョムスキー階層 Type 0 帰納的可算言語 チューリングマシン Type 1 文脈依存言語 線形有界オートマトン Type 2 文脈自由言語 プッシュダウンオートマトン Type 3 正規言語 有限オートマトン (正規表現) 外側ほど表現力が高く、認識に必要な計算能力も高い 表現力
チョムスキー階層の入れ子構造イメージ
ひよこ ひよこ

形式言語って普通の言語と何が違うの?

ペンギン先生 ペンギン先生

日本語や英語のような「自然言語」はあいまいさがあるよね。「彼女は美しい花の絵を描いた」は複数の解釈ができる。形式言語は文法規則を数学的に厳密に定めて、あいまいさを完全に排除した言語のことだよ

ひよこ ひよこ

チョムスキー階層って何?

ペンギン先生 ペンギン先生

言語学者のノーム・チョムスキーが提唱した分類で、文法の複雑さで言語を4段階に分けたものだよ。正規言語(Type 3)→ 文脈自由言語(Type 2)→ 文脈依存言語(Type 1)→ 帰納的可算言語(Type 0)の順に表現力が上がるんだ

ひよこ ひよこ

プログラミングとどう関係するの?

ペンギン先生 ペンギン先生

プログラミング言語の構文はほぼ「文脈自由言語」として定義されているんだ。コンパイラは文脈自由文法のルールに従ってソースコードを解析する。BNF記法でプログラミング言語の文法を書くのは、まさに形式言語理論の応用だよ

ひよこ ひよこ

正規言語と文脈自由言語の違いは?

ペンギン先生 ペンギン先生

正規言語は括弧の対応のようなネスト構造を扱えないけど、文脈自由言語は扱える。例えば「aをn個、bをn個」という言語は正規言語では表現できないけど、文脈自由言語なら可能なんだ。この違いがオートマトンの能力の差にも対応しているよ

ひよこ ひよこ

実務で形式言語の知識が役立つ場面ってある?

ペンギン先生 ペンギン先生

パーサーやDSL(ドメイン固有言語)を設計するときに直結するよ。それに、正規表現の限界を理解していれば「HTML正規表現パースしてはいけない理由」もすぐわかる。HTMLネスト構造があるから文脈自由言語であって、正規言語では扱えないんだ。こういう判断ができるのが理論を学ぶ強みだね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「形式言語」って出てきたら「文法ルールで厳密に定義された言語の理論」と思えればだいたいOK!
📖 おまけ:英語の意味
「Formal Language」 = 形式言語
💬 「formal」は「形式的な・厳密な」という意味で、日常言語のあいまいさを排除して数学的に厳密に定義した言語のことだよ
← 用語集にもどる