ログイン
kid's world

トークン

トークン

さらに文法的な話は続く。「文字列はまだか!」というお怒りの言葉が聞こえてきそうだが,もう少々がまんをしていただきたい。

ここまでの知識で,C言語は「すべては式と,それを構成する演算子によって成り立っている」と考えることができる。しかし,さらに細かく見ることもできる。

自然界ではすべての物体は,これ以上分解できないという「原子」によって成り立っているが(原子をさらに分解して考えることもあるが,きりがないのでここではその話は無視),C言語を構成する要素をどんどん分解していき,「これ以上分割できない」というところまで分解すると,それは「トークン」という単位になる。

例として,List 3のプログラムをトークンに分解してみよう。

List 3: トークンで分割する前のプログラム

#include <stdio.h>

main()
{
  printf("Hello!\n");
}

「#include」から始まる行は無視する。なぜなら実際にコンパイルされる最終段階では,この部分は別の内容で置き換えられているからだ。するとList 3は,List 4のようなトークンからできている。

List 4: トークンで分割

main
(
)
{
printf
(
"Hello!\n"
)
;
}

トークンはプログラムの最小単位,これ以上分割できない単位である。トークンを意図的に分割してしまうと,とたんに意味が変わってしまう。たとえば,

main

を,

ma in

というように,「ma」と「in」の間にスペースを入れてしまうと,これは「ma」と「in」というべつべつのものとして認識されてしまう。

トークン間は「空白文字」によって区切られる。トークンとトークンをそのまま結合してはならない。ただし例外があり,(,),{,},;のような記号,それから+, -, *, /などの演算子はほかのトークンと結合しても意味が通じるときは,結合してもよいことになっている。つまり,

main ( )

というように1つ1つ区切らなくても,

main()

と書いてよい,という意味である。

フリーフォーマット

わざわざトークンの話を持ち出したのは,C言語の特徴であるフリーフォーマットを説明したかったからである。C言語は,トークンを分割することさえしなければ,どのように書いてもかまわない。トークンを区切るものは空白文字(スペース,改行,タブ文字)である。私たちは今まで,何げなくList 3のようなプログラムを書いてきたが,ギチギチに詰めてList 5のように書いても,List 6のようにバラバラに書いても同じことなのだ。

List 5: ぎちぎちに詰めたプログラム

#include <stdio.h>
main(){printf("Hello!\n");}

List 6: ばらばらにしたプログラム

#include <stdio.h>

main
(
)
{
printf
(
"Hello!\n"
)
;
}

このようにプログラマの都合で自由に書くことができるこの方式のことを,フリーフォーマットという。すべての言語がフリーフォーマットなわけではない。これはC言語の特徴の1つである。

わかりやすくいえば,C言語には行という概念がないのだ。なぜなら,トークンを区切るものは「空白文字」であり,スペースも改行も区別がないからである。

C言語がフリーフォーマットだということは,プログラムの体裁はプログラマにゆだねられているということであり,まったく同じ式や文から成り立っているプログラムでも,プログラマの書き方によって,そのプログラムがスッキリと見えたり,逆にごちゃごちゃして見えたりすることがある。

これまで,main関数の内部の文の左側には「2文字ぶんのスペース」を入れて書いてきたが,これは関数とその関数の中身の文とをわかりやすく区別するためのテクニックにすぎず,そう書かなければならないという意味ではない。

どのように書くとプログラムが見やすくなり,バグを作りにくくなり,また仮にバグが紛れ込んだとしても容易にデバッグできるかについては,「プログラミングスタイル」と称していろいろな議論がされている。この議論を専門に扱う本も出ているので,参考にされるとよいだろう(例:『C/C++によるプログラミングスタイルブック』,林晴比古著,ソフトバンク パブリッシング)。


文字列型?」へ進む

広告


©Toshio Koide 1996-2007.

目次

リンクについて

リンクは御自由にどうぞ。

メール

mail.gif

広告