トークンってなに?
トークン?
買った本によると「プログラムの基本的な字句単位」をトークンと呼ぶそうな。
英語の文章で言えば、単語とかピリオドとか、意味を成す一つ一つの最小単位の事ですね。
そのトークンの生成規則、文法っていうんでしょうか、文章で書くと
IDはアルファベットで始まって、アルファベット、数字、またはアンダーバーがつづく・・・
とかって、よくプログラム言語の入門書に書いてあるあれ、あれが生成規則になります。
でも、全部文章にするとわかりにくいので、以下のように書くみたいです。
1. SPEC_SYM → '=' | ';' | ':' | ',' | '.' | '+' | '-'
2. NON_KEY_ID → ALPHA ALPHANUMS
3. ALPHA → 'a' | 'b' | 'c' |・・・|'x' | 'y' | 'z' | '_' |
'A' | 'B' | 'C' |・・・|'X' | 'Y' | 'Z'
4. NUM → '0' | '1' | '2' |・・・|'8' | '9'
5. ALPHANUM → ALPHA | NUM
6. ALPHANUMS → ALPHANUM ALPHANUMS
→ λ
7. NUMS → NUM NUMS
→ λ
8. TOKEN → NON_KEY_ID | SPEC_SYM | NUMS
上で「|」ってなっているのは or の意味で、ALPHAで言えば'a'または・・・のどれかの記号、という意味になります。
ちなみに、ここで
'a'や'='などの実際の文字を終端記号
ALPHAやNUMなどの記号を非終端記号
と言うそうです。なんかガクモンっぽくてかっこいいですよね。非終端→ここじゃ終われないよ! ってことですね。
NUMS → NUM NUMS
→ λ
っていうのは、NUMSはNUM、つまり0から9までの数字の後にNUMSがつづくか、何もしない(λ)のどちらか、という意味です。
例えば、
NUMS → 1 NUMS → 1 2 NUMS → 1 2 3NUMS → 1 2 3 λ → 123
と言った具合で任意の数字の列を生成出来るってわけです。
ここが決まれば、あとはひたすらプログラムに落としていくだけです。
さあ、明日からがんばろう。