『コンパイラ・スクリプトエンジン』 相談室 2
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
150:デフォルトの名無しさん 02/07/29 04:09 字句解析をする際に予約語と予約語でない名前とを区別するにはどうするべきなんでしょうか? つづりを切り出し照合せよなどと本には書いてあったのですが、意味がよく分かりません。 ハッシュ法を使って何とかするのでしょうか? 151:デフォルトの名無しさん 02/07/29 05:24 >>150 とりあえず単語切り出すところまではできてるとして、後は static const char *keywords[] = { "if", "else", "while", ..., NULL }; int is_keyword(const char *s) { int i; for (i = 0; keywords[i] != NULL; ++i) if (strcmp(s, keywords[i]) == 0) return 1; return 0; } とか。キーワード数が増えたら、ベタな線形検索やめてハッシュや二分木を 使った方が良いかもしれんが、たかだか数十程度なら気にしなくて良い。 152:ろうひ男爵 02/07/29 09:44 >>150 c言語+asmのマクロを展開するプログラムを作って、 当初は普通の検索(線形検索)で90秒かかった処理が、 ハッシュ(チェイン法)を使って15秒になったよ。 でも、そのときの登録語数が3万単語位なので、 cコンパイラ部分だけで使うくらいの語数(変数合わせて千単語ぐらい)だと、 それほど性能の差は無いと思うよ。 ちなみに、2本木の方が実装は難しいかも。
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
4972日前に更新/200 KB
担当:undef