|
/*========================================================*/ <<<あゆしゃの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 |