5
私は小さなCコンパイラを書こうとしていますが、どこのC99でも文法は見つからないようです。私はC90とC99の標準文書を見つけましたが、文法自体はどこにも見つかりません。C90とC99の明示的な文法はどこで見つけることができますか?
私は小さなCコンパイラを書こうとしていますが、どこのC99でも文法は見つからないようです。私はC90とC99の標準文書を見つけましたが、文法自体はどこにも見つかりません。C90とC99の明示的な文法はどこで見つけることができますか?
C99標準の附属書A(linked by Wikipedia)は、文法のように見えます。
typedefの名前を他の識別子と区別するための文法上の問題があります。つまり、yaccに入力して動作させることはできませんが、それは最も信頼できるソースです。
実際にあります。 Typedefの名前は、定義された後は効果的にキーワードになりますが、スコープ外に出るとキーワードではなくなります。つまり、シンボルテーブルからパーサへの何らかのフィードバックが必要です。他の多くの言語では必要としないものと思います。ちょうど1つの例: 'foo'がtypedefかどうかを知らなくても' sizeof(foo [10]) 'を解析することはできません。 (歴史的には、これはtypedefがK&Rより前の言語に比較的遅れていたためですが、型システムが定義された後です) –
... typedefの問題を処理した後でさえ、抽象的な宣言子を解析することは驚くことではありません複合体。大学院生として、私は研究プロジェクト用のCパーサーを書いていました。それを正しく理解する方法を見つけようとしたとき、GCCのパーサーを含めて、私が掘り下げた既存の実装のそれぞれについて、反例を発見しました。私は現在の反例のどれか、あるいは他の詳細を思い出すことができません。彼らは毛深かった。 –
さて、私は気が狂っているだろう、今は気が気にならない。文法の文脈感受性については、私は先に進んで無視しようと思っています...私は完全に機能するコンパイラをまだ書いていません... – Alex