俺のバカバカバカバカバカ
本物のプログラマは使い捨てプログラムに Perl を使わない !
Ruby や Python なんてのは,平成生まれの女子供が使うもんだ.ましてや Java や ML なんてのは,オーバーキルも良いところだ.
本物のプログラマは AWK を使う.みんなもっと近代計算機科学を作り上げた三巨人 Aho,Weinberger,Kerninghan に敬意を払いたまえ !
・・・ という小ネタを,Rogue Engineer's Diary / やさぐれ日記 [Modern Compiler Implementation in ML] フローグラフを描いて遊ぶ を見ていたら思いついてしまい,今まで一度も使ったことが無い AWK プログラミングをやってみた.
本当ならば,15 分くらいでプログラムを書き上げて,冒頭の煽り文句の後にネタ文をぐだぐだと書くつもりだったのに・・・
想像以上に,(純) AWK は非力ですた (´・ω・`)
なんと,グループ化した正規表現の後方参照すら使えない.
「Perl かエディタの置換機能を使えば 3 分なのになぁ」 と 20000 回ぐらい思いながら,必死でウェブ上を検索.
ここまで来て現代的スクリプト言語を使ったら負けだ ! I hate Perl という強い意志を貫くんだ !
(さすがだぜ,プロシュート兄貴 ! グレイト・・・ フル・・・ デッ・・・ ド)
気がついたら,一日が終ってました.
あれ,時計の針が,半円くらい回ってるよ・・・ なんで ?
あれれ,僕の日曜日,どこに落っことしちゃったんでちゅかねー,おかちいでちゅねー.
やつを追う前に言っておくッ!
おれは今やつのスタンドをほんのちょっぴりだが体験した
い…いや…体験したというよりはまったく理解を超えていたのだが……
あ…ありのまま 今 起こった事を話すぜ!
「俺は朝風呂に入って,爽やか気分で PC を点け,なにげなく午後の楽しい予定を考えながら Web ブラウジングしていたと思ったらいつのまにか日曜が終っていた」
な… 何を言ってるのか わからねーと思うが おれも何をされたのかわからなかった… 頭がどうにかなりそうだった…
正規表現に嵌まったとか,AWK のサンプルコードがほとんど見つからなかったとか,そんなチャチなもんじゃあ 断じてねえ・・・
もっと恐ろしいものの片鱗を味わったぜ…
キングクリムゾン !!
この世の時間は消し飛び…… そして全ての人間 は、この時間の中で動いた足跡を覚えていないッ! ドッギャアアァァァァァァン!!!
残るのは『結果』だけだ.「GCC の構文解析後の Tree を視覚化する」 という『結果』だけが残る.
なんとか書き上げたものの,超汚いプログラムになっちゃったし・・・ 結局軟弱で近代的な gawk 使っちゃったし・・・ もう身も心もボロボロですよ.死にたい.
AWK は基本的に行指向なので,ファイル丸ごと読みこむ,みたいな処理は (できるのかもしれませんが) 面倒なんですよね.
まぁ,一つの多機能なプログラムを作るよりも,細々としたスクリプトをたくさんつなぎあわせて,一行読みこんで出力して次のフィルタに回して,みたいなツールボックス的パイプライン処理は,UNIX 的なのですが.
今回は,単純に私の力不足ですからねぇ (´д`)
テキトーに改行とか空白とかを整える前処理スクリプト pre.awk.
たぶん効率も最悪.
視覚化には,Graphviz を使っているので,dot 形式に変換するスクリプト treeviz.awk.驚異的に投げやりな,動けばよかろうなのだァァァァーーッ!プログラムで御目汚しすみません 。・゚・(ノД`)・゚・。
(awk は,ある意味,ヘッドパターンマッチングができるルール型言語)
使い方は,
するとまぁ,こんな感じの画像が.

こんなゴミプログラムで人生を浪費してしまった・・・ いろいろおかしいところがありますが,もうやる気が萎えてしまいました.
(なんかつながってないノードとかある.たぶん [a-zA-Z]+ → [a-zA-Z][a-zA-Z0-9]* みたいに,正規表現をちょこっと変えれば OK なはず.でも,そもそも tree-dump の書式がよくわからんから放置)
紫の空を眺めながら,散歩でもしてきます.
残り少ない日曜日の破片を拾い集めながら・・・ ('・c_・` )
このまま,どこか遠く 連れてって くれないか
君は,君こそは 日曜日よりの使者
シャラララ シャララララ シャララーラ シャラララーラ
適当な 嘘を付いてー 誰一人 傷付けない
君は きーみこそはー にちよーーーーーび
よりのーーーーししゃーーーー (↑THE HIGH-LOWS↓)
もう,コンピュータなんて大っ嫌い !!(´Д⊂ヽ
Ruby や Python なんてのは,平成生まれの女子供が使うもんだ.ましてや Java や ML なんてのは,オーバーキルも良いところだ.
本物のプログラマは AWK を使う.みんなもっと近代計算機科学を作り上げた三巨人 Aho,Weinberger,Kerninghan に敬意を払いたまえ !
・・・ という小ネタを,Rogue Engineer's Diary / やさぐれ日記 [Modern Compiler Implementation in ML] フローグラフを描いて遊ぶ を見ていたら思いついてしまい,今まで一度も使ったことが無い AWK プログラミングをやってみた.
本当ならば,15 分くらいでプログラムを書き上げて,冒頭の煽り文句の後にネタ文をぐだぐだと書くつもりだったのに・・・
想像以上に,(純) AWK は非力ですた (´・ω・`)
なんと,グループ化した正規表現の後方参照すら使えない.
「Perl かエディタの置換機能を使えば 3 分なのになぁ」 と 20000 回ぐらい思いながら,必死でウェブ上を検索.
ここまで来て現代的スクリプト言語を使ったら負けだ ! I hate Perl という強い意志を貫くんだ !
(さすがだぜ,プロシュート兄貴 ! グレイト・・・ フル・・・ デッ・・・ ド)
気がついたら,一日が終ってました.
あれ,時計の針が,半円くらい回ってるよ・・・ なんで ?
あれれ,僕の日曜日,どこに落っことしちゃったんでちゅかねー,おかちいでちゅねー.
やつを追う前に言っておくッ!
おれは今やつのスタンドをほんのちょっぴりだが体験した
い…いや…体験したというよりはまったく理解を超えていたのだが……
あ…ありのまま 今 起こった事を話すぜ!
「俺は朝風呂に入って,爽やか気分で PC を点け,なにげなく午後の楽しい予定を考えながら Web ブラウジングしていたと思ったらいつのまにか日曜が終っていた」
な… 何を言ってるのか わからねーと思うが おれも何をされたのかわからなかった… 頭がどうにかなりそうだった…
正規表現に嵌まったとか,AWK のサンプルコードがほとんど見つからなかったとか,そんなチャチなもんじゃあ 断じてねえ・・・
もっと恐ろしいものの片鱗を味わったぜ…
キングクリムゾン !!
この世の時間は消し飛び…… そして全ての人間 は、この時間の中で動いた足跡を覚えていないッ! ドッギャアアァァァァァァン!!!
残るのは『結果』だけだ.「GCC の構文解析後の Tree を視覚化する」 という『結果』だけが残る.
なんとか書き上げたものの,超汚いプログラムになっちゃったし・・・ 結局軟弱で近代的な gawk 使っちゃったし・・・ もう身も心もボロボロですよ.死にたい.
AWK は基本的に行指向なので,ファイル丸ごと読みこむ,みたいな処理は (できるのかもしれませんが) 面倒なんですよね.
まぁ,一つの多機能なプログラムを作るよりも,細々としたスクリプトをたくさんつなぎあわせて,一行読みこんで出力して次のフィルタに回して,みたいなツールボックス的パイプライン処理は,UNIX 的なのですが.
今回は,単純に私の力不足ですからねぇ (´д`)
テキトーに改行とか空白とかを整える前処理スクリプト pre.awk.
#! /usr/bin/gawk -f
/^[^;]/{
gsub(/^@/, "~@", $0);
gsub(/( *):( *)/, ":", $0);
print;
}
たぶん効率も最悪.
視覚化には,Graphviz を使っているので,dot 形式に変換するスクリプト treeviz.awk.驚異的に投げやりな,動けばよかろうなのだァァァァーーッ!プログラムで御目汚しすみません 。・゚・(ノД`)・゚・。
#! /usr/bin/gawk -f
BEGIN {RS = "~@"; printf "digraph G {\n node [shape = record];";}
/^[0-9]/{
s = sprintf("%s [label = \"{%s | {", $1, $1);
for(i = 2; i < NF - 1; i++)
s = s sprintf("%s | ", $i);
s = s sprintf("%s}}\"];\n", $i);
$0 = s;
while (/([a-zA-Z]+):@([0-9]+)/){
format = sprintf("<\\1>\\1 \\3\n %s:\\1 -> \\2;", $1);
$0 = gensub(/([a-zA-Z]+):@([0-9]+)(.*)$/, format, "g");
};
printf " %s\n", $0;
}
END {print "}"}
(awk は,ある意味,ヘッドパターンマッチングができるルール型言語)
使い方は,
# テストプログラム
$ cat test.c
int main() {int x = 1 - 1; return x;}
# 生の木構造をダンプ
$ gcc -fdump-tree-original-raw test.c
$ ./pre.awk test.c.t02.original | ./treeviz.awk > tree.dot
$ dot -Tpng tree.dot -o tree.png
するとまぁ,こんな感じの画像が.

こんなゴミプログラムで人生を浪費してしまった・・・ いろいろおかしいところがありますが,もうやる気が萎えてしまいました.
(なんかつながってないノードとかある.たぶん [a-zA-Z]+ → [a-zA-Z][a-zA-Z0-9]* みたいに,正規表現をちょこっと変えれば OK なはず.でも,そもそも tree-dump の書式がよくわからんから放置)
紫の空を眺めながら,散歩でもしてきます.
残り少ない日曜日の破片を拾い集めながら・・・ ('・c_・` )
このまま,どこか遠く 連れてって くれないか
君は,君こそは 日曜日よりの使者
シャラララ シャララララ シャララーラ シャラララーラ
適当な 嘘を付いてー 誰一人 傷付けない
君は きーみこそはー にちよーーーーーび
よりのーーーーししゃーーーー (↑THE HIGH-LOWS↓)
もう,コンピュータなんて大っ嫌い !!(´Д⊂ヽ
