ベーシック生成文法を読んだ
最近チョムスキー関連の本を読み漁っているが、生成文法の基礎が分からなかったので読んだ。
生成文法って何?
生成文法(Generative Grammar)とは、1950年代にノーム・チョムスキーによって提唱された言語理論で、子どもが、言語を習得する際に、何も教えなくても話せるようになるのは普遍文法(universal grammar、UG)を生得的に備えているから喋れるようになるというものだ。何言っているだという感じだが、普遍文法はコンピューターでいうとCPUのような機械的な装置と考え、この原理と、変動するパラメータによって文を話せる、文を作れるようになるという考え方だ。つまり生成文法の核心は、言語には有限の規則があり、その規則を組み合わせることで無限の文を生成できるという考え方だ
例えば文を考えるとき、英語だとSVO日本語だとSOVになる。日本語の基本的な文構造「主語+目的語+動詞」という規則を知っていれば、様々な主語と目的語と動詞を入れ替えて、無数の文を作り出すことができるというわけだ。
文は樹形図で表現できる
例文として「彼女が本を読む」を考えたときに以下のような樹形図を書く。
S (文:Sentence)
/ \
NP VP (名詞句:Noun Phrase、動詞句:Verb Phrase)
/ \ / \
N P NP V (名詞:Noun、助詞:Particle、動詞:Verb)
| | / \ |
彼女 が N P 読む
| |
本 を
生成文法では二股分岐(binary branching)で基本表せる。これは最初知ったとき非常に驚いた。文ってめちゃくちゃ長いのに、最終的に分解していったら必ず二股に分かれていくというのだから。。。
これは日本語でも英語でも他のあらゆる言語でも適用できるルールである。これを知ってなんかプログラミングみたいだなと感じた。命令型ならこう書くけど関数型ならこう書くみたいなパラダイムの違いも、SVOやSOVなど書き方に違いがあるが結果は同じみたいな話に近いと感じた(当たり前なんだけどね。)
移動
生成文法では移動という概念が非常に重要になってくる。まだ完全に理解できていないので、ざっくり説明だが受動文と能動文みたいな感じで目的語が主語に入れ替わるみたいな現象のことだ。(他にも様々な移動の規則がある)
本書ではこの様々な移動の仕方についてかなり基礎的なことが書かれている。まだ理解しきれていない部分も多いので、復習はしたいが移動についてもプログラミングでも近いのあるのなーと思ったりした。
Reactにはlifting state upというのがあるが、生成文法で、樹形図の要素が下位の位置から上位の位置へ移動する営みが、子コンポーネントから親コンポーネントへ状態が持ち上げられるのと似ているなと感じた。
痕跡(Trace)という考え方が生成文法にはあり移動した要素は元の位置に痕跡を残し、その痕跡と移動先の要素は関連付けられる。これはpropsを通じて子コンポーネントはその状態を参照できると似ている。
違う点としては生成文法の方は、普遍的な規則に基づく操作であり、lifting state upは設計パターンの一つで、開発者が意図的に選択することだろう。
感想
難しい!非常に難しい!でも理解できると感動があって面白いので、趣味レベルで学んでいくつもり。ちなみに副産物として、ゆる言語学ラジオの生成文法を取り扱った回があるので視聴したが、先にこっちを視聴しておくと本書の前半は、かなり理解度が高い状態で読み進められるので良かった。