Updated the tutorial chapter 2.

This commit is contained in:
yhirose 2015-08-08 21:04:04 -04:00
parent a3cfd1b8ad
commit 646eb7d5e9

View File

@ -1,8 +1,8 @@
# PEGで言語をデザインしてみよう
PEGについて一言で説明しなさいと言われたら「言語を定義するための言語」と答えるつもりです。パーサジェネレータはこのPEGを使って定義されたプログラミング言語の厳密な文法定義を読み込んで,パーサを生成することができます。
PEGについて一言で説明しなさいと言われたら「言語を定義するための言語」と言えるかもしれません。パーサジェネレータはPEGを使って厳密に定義された言語の文法を読み込んで,パーサを生成することができます。
この「PEG言語」はC++やJavaScriptなどの処理手続きを記述する言語とはずいぶん毛色が違います。むしろ正規表現XML SchemerDBのテーブルスキーマのような「規則を定義」するタイプの言語に似ています。
PEGはC++やJavaScriptなどの処理手続きを記述する言語とはずいぶん毛色が違います。むしろ正規表現XML SchemerDBのテーブルスキーマのような「規則を定義」するタイプの言語に似ています。
この章では次の「言語」をPEGを使って定義してみます。
@ -12,17 +12,17 @@ PEGについて一言で説明しなさいと言われたら「言語を定
* JSON
* JavaScriptの小さなサブセット
下に行くほど文法定義が難しくなりPEGのより多くの記法を使う必要が出てきます。これらの例が終わる頃には簡単なスクリプト言語を自分でデザインできるようになるでしょう。もちろん文法を定義しただけなのでコードを動きませんが。^^;
下に行くほど文法定義が難しくなりPEGのより多くの記法を使う必要が出てきます。これらの例が終わる頃にはきっと簡単なスクリプト言語を自分でデザインできるようになるでしょう。(もちろん文法を定義しただけなので,コードを動きませんが。^^;
PEGの記法についてはこの章を読み進めるうちに自然に学べるように書いているつもりです。しかし時間があれば,kimizuさんの[「PEG基礎文法最速マスター」][Link_BasicGrammar]をご覧ください。PEGの記法についてとても簡潔にわかりやすくまとめられています。下記の例題を始める前に一読するなら,理解が確実に速まること間違いなしです。
PEGの記法についてはこの章を読み進めるうちに自然に学べるようになっています。しかし時間が許すなら,是非kimizuさんの[「PEG基礎文法最速マスター」][Link_BasicGrammar]をご覧ください。PEGの記法についてとても簡潔にわかりやすくまとめられています。
「習うより慣れろ」と古くから言われるように,実際に手を動かしてコードを書くことは理解を深めるための早道です。その際[「PEG Playground」](http://yhirose.github.io/peglint/)ご活用ください。このWeb アプリはPEGの文法定義コードと定義される言語のコードをリアルタイムに行ってくれます。
「習うより慣れろ」と古くから言われるように,実際に手を動かしてコードを書くことは理解を深めるための早道です。その際[「PEG Playground」](http://yhirose.github.io/peglint/)ご活用ください。このWeb アプリはPEGの文法定義コードと定義される言語のコードをリアルタイムにチェックしてくれます。
ではさっそく一番目の例から見てみましょう。
## 日本語の「文」を定義する
文法と聞くと,遠い昔の国語の授業を懐かしく思い出します。ではPEGを使って簡単な「文」のルールを作ってみましょう。こんな感じでどうでしょうか
文法と聞くと,遠い昔の国語の授業を懐かしく思い出します。まずは簡単な「文」のルールを定義しましょう。
<- 主語 述語 ''
@ -54,6 +54,9 @@ PEGの記法についてはこの章を読み進めるうちに自然に学
文法を少し修正しましょう。
<- 修飾語? 主語 述語 ''
主語 <- 名詞 助詞
述語 <- 動詞 助詞
修飾語 <- 形容詞
名詞 <- 'サーバー' / 'クライアント'
形容詞 <- '古い' / '新しい'
動詞 <- '落ち' / '復旧し'
@ -70,12 +73,13 @@ PEGの感覚がつかめてきましたか
さてここまでで使用した4つの記法についておさらいしましょう。
| 記法 | 意味 | |
|:-----|:---------------------------------------------|
| <- | ルールの定義 | 右側がルール名左側はPEGの式 |
| / | 選択|右から左へ順番にマッチを試みる |
| ? | 0回または1回 | |
| '' | 文字列リテラル | |
| 記法 | 意味 |
|:---------|:---------------|
| <- | 構文規則の定義 |
| &#2423; | 連接 |
| / | 選択 |
| ? | 0回または1回 |
| 'string' | 文字列リテラル |
[Link_BasicGrammar]: http://kmizu.hatenablog.com/entry/20100203/1265183754