『コンパイラ・スクリ ..
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
91:デフォルトの名無しさん 02/06/10 16:08 >90 これ、VC6でコンパイル通らないんだけど、何だったらできる? 92:デフォルトの名無しさん 02/06/11 00:42 C++の構文解析、 struct C { C (f)(); /*Cを返す関数f*/ C(); /*コンストラクタ*/ }; というので、{}のなかの 'C' まで読んだ時点でそれがclass-nameかdeclaratorかどうやって判断しているの? ひとつだけの先読みではわからないですよね。LALR(1)とかいうのとはちがうのですか? 93:デフォルトの名無しさん 02/06/11 02:37 >>92 http://www.y-adagio.com/public/reports/mh_inst/1996/19.doc.htm 94:デフォルトの名無しさん 02/06/11 02:44 >>92 読んだ時点で判断してるわけないと思うが。 そこは意味解析で判断する部分。 構文解析の段階だと C(); は「戻型が省略された関数C」とでも解析されるんだろう。 structの定義('}')が終わった段階で、 初めて意味解析が走ると考えたほうが自然。 95:デフォルトの名無しさん 02/06/11 03:48 >>94 struct の } 終わってから解析って、そりゃ構文解析でほとんど何もやってない に等しい気が……。struct C の段階で「C」を型名としてシンボルテーブルに登 録しておいて C (f)(); → 識別子 '(' 識別子 ')' '(' 識別子 ')' ';' ぐらいにバラしてスタックに積んでおき、この段階で意味解析に掛けると思う。 構造体の宣言が終わらなくても ';' 単位でばらせば、十分に解析可能だよね。 少なくとも型名やら名前空間やら、必要な情報は事前に出てるわけだし。 (そうでもない?)
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
4998日前に更新/200 KB
担当:undef