プログラミングと工作と

PythonとかPascalとかAVRマイコンとか、コンパイラつくったり電子工作なんかを楽しんでいるおっさんの記録

トークンってなに?

トークン?
買った本によると「プログラムの基本的な字句単位」をトークンと呼ぶそうな。
英語の文章で言えば、単語とかピリオドとか、意味を成す一つ一つの最小単位の事ですね。

そのトークンの生成規則、文法っていうんでしょうか、文章で書くと
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

と言った具合で任意の数字の列を生成出来るってわけです。

ここが決まれば、あとはひたすらプログラムに落としていくだけです。
さあ、明日からがんばろう。