メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.535) PerlChecker4 構造解析  2005/01/31


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第535回 PerlChecker4 構造解析
 発行    2005年1月31日(月曜日)
 発行数   約2600

{magclick}
/*========================================================*/
 はじめに ( 決り文句 )
/*========================================================*/
・このメールマガジンは、主にまぐまぐさんから発行しています。
・ジャンルは、マルチメディアのプログラム、C言語です。
・横60文字で作成し、インデントは大抵半角スペース4つです。
・ここで扱うプログラムは、C言語と半光年以内のものです。
・登録解除は、メルマガのホームページでお願いします。
・過去ログはバックナンバー(下欄参照)を活用して下さい。
・内容は私が感じたもので、最新の技術も、へたれもあります。
・わかりやすさを優先させる為、たまに嘘があるかもしれません。
・セキュリティ突破のため、暗号化された単語があります。

/*========================================================*/
 ご挨拶
/*========================================================*/

 こんにちは。あゆしゃです。

 今回は相互紹介があります。

/*========================================================*/
▼やったあ!毎日5分でWEBクリエイターになれる! 
http://www.mag2.com/m/0000113225.htm
ネットビジネスのための一口メモ。さらりと読める今日のヒントです。
/*========================================================*/

 5分で読める内容ではないなぁというのが第1印象ですが、
10分なら読めるでしょう。

 内容は硬いようなやわらかいような、まじめなことを言った後に
落ちをつけるのを忘れておらず、殺気を感じます。

 そんな読者数は5万人。

 すごすぎです。
 それだけ「落ち」が愛されているのかもしれません。

 最新のものでは「オートステップメール」なるものが紹介されて
いました。

 私は初めて聞く単語です。

 そもそもWEB技術に余り詳しくないもので。

 内容をてらっと読んでみると、メールマガジンではあるものの、
読者が登録をすると、最新号ではなく、1から順番に送られてくる
というものらしいです。

 なるほど、たとえばこのメルマガの「平方根シリーズ」だけを
講読したい、という場合、「あゆしゃのC言語プログラミング」で
登録するのではなく、「あゆしゃのC言語プログラミングの
平方根シリーズ」で登録をすると、毎週月水金に1個ずつ順番に
第430回以降のメールが送られてくるのでしょうか。

 時事ねたがずれるのは仕方がないとして、過去ログをどばっと
読むよりも、順次読みふけっていくのは、いいかもしれません。

 発行者がシリーズを作るのが面倒くさい気がしますが、
気のせいでしょう。

{magclick}
/*========================================================*/
 今回のお題  << PerlChecker4 構造解析 >>
/*========================================================*/

 さて前回、ファイルとスコープを解析する処理の大枠を作りま
した。

 今回はスコープ解析の中、構造解析について考えます。

 Perlの構文として簡単に考えられる点は、以下のものです。

・#以降改行まではコメントとして無視する

・$または@もしくは*に続くアルファベットは変数とする

・”または’で囲まれる範囲はテキストとする

・ただし’で囲まれたテキストである場合は変数を検出しない

・テキストではない{はスコープをネストする

・テキストではない}はスコープを終了する

・日本語の第2バイトが¥である場合は直後が¥である

 困るのは、波括弧がキャストの意味も持っているというところ
ですが、とりあえず無視します。


int text = 0; // テキストであるかどうかのフラグ

int add = 1; // 読み飛ばすサイズ
int last = 0; // スコープ関数を抜けることを意味するフラグ

// 日本語の検出
if( _ismbblead( *pch ) && _ismbbtrail( pch[ 1 ] ) ) {
if( pch[ 1 ] == '\\' ) {
if( pch[ 2 ] == '\\' ) {
add = 3;
}
else {
add = 2;
out = error( ... ); // おかしい
}
}
else {
add = 2; // 普通に日本語
}
}

// 変数の取得
else if( text != '\'' &&
( *pch == '$' || *pch == '@' || *pch == '*' ) &&
__iscsym( pch[ 1 ] ) )
{
// 変数名称を取得
// キャストの{}を判定する処理が将来ここに必要
char* pch2 = pch + 1;
while( __iscsym( *pch2 ) ) pch2++;
int len = pch2 - pch; // 変数の長さを取得
// 変数を登録
...
}

// テキストである場合
else if( text ) {
// テキストの終了をチェック
if( *pch == text ) {
text = 0;
}
// ¥を検出
else if( *pch == '\\' ) {
add = 2; // 次の1文字を読み飛ばす
}
}

// テキストではない場合
else {
// テキストの検出
if( *pch == '\'' || *pch == '\"' ) {
text = *pch;
}
// コメントの検出
else if( *pch == '#' ) {
break; // 行単位の解析を抜ける
}
// スコープの検出
else if( *pch == '{' ) {
pch++;                     // { を読み飛ばす
ScopeCheck( ... );         // 再起呼び出し
add = 0;
}
// スコープの終了
else if( *pch == '}' ) {
last = 1;                  // 終了する
}
}

 こんな感じでしょうか。

{magclick}
/*========================================================*/
 さいごに
/*========================================================*/

 29日土曜日に大きな地震がありました。

 豊田市では、真下から突き上げるような「ドン!」という衝撃
がありました。

 しかし、ドン、だけで終わってしまったのです。

 まったくゆれたりはしませんでした。

 不思議な地震です。

 震度は1だったそうです。

{magclick}
/*========================================================*/
 次回予告
/*========================================================*/

 次回は2月2日(水曜日)に、第536回をお送りします。
 お題は「性格とは何か」

 ちょっと駄文です。
 よく、血液型で性格が変わるといいますよね。

 なぜでしょうか?

 私はそれが不思議で不思議でしょうがなかったのですが、ふと、
ひらめきました。

 お楽しみに!

/*========================================================*/
 最後の決り文句
/*========================================================*/
 このメールマガジンは、まぐまぐさんから発行しています。
 このメールマガジンを解除したい場合は、まぐまぐさんをご利用
ください。このメルマガのまぐまぐアイディーは最後にあります。
 このメールマガジンには広告が挿入されていますか?
 このメールマガジンの内容に文面の引用はありませんか?
 めーらっくすの場合はめーらっくすの利用方に従ってください。
 このメールマガジンの内容の、転用、流用、宣伝、リンク、
じゃんじゃじゃんじゃじゃんじゃじゃんじゃ♪
「てれっびゲームが だぁい好きで〜♪ なんて大歓迎です。

{magclick}
/*========================================================*/
 
/*========================================================*/

発行者 あゆしゃ

ホームページ::あゆしゃの世界
http://ayusya.hp.infoseek.co.jp/

ご意見・ご感想・ご質問メール
mailto:ayusya@flamenco.plala.or.jp

まぐまぐ::アイディー
0000020674

まぐまぐ::登録と解除
http://www.mag2.com/m/0000020674.htm

まぐまぐ::バックナンバー
http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674

めーらっくす::アイディー
MM3E1AEE285AB4F

めーらっくす::登録と解除
http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F 

めーらっくす::バックナンバー★最近のものならこちらが便利★
http://www.mailux.com/mm_bno_list.php?mm_id=MM3E1AEE285AB4F

ブラウザの閉じるボタンで閉じてください。