2013-06-09 14 views
6

私は、ソースファイルをスローし、コンパイラのビジネスまたはプリプロセッサのビジネスのいずれかのセクションに分割するステートマシンを作成しようとしています。深いトラバーサルではなく、私はコメントやプリプロセッサのディレクティブのセクションを探しています。 (マクロ無し、条件付きでコンパイルされたブロックなどはありません)プリプロセッサディレクティブはどこで指定できますか?

コメントは簡単ですが、私は100%プリプロセッサディレクティブを指定することができません。たとえば、次の行は合法ですか?

int i; #include <derp.h> 

いくつかのディレクティブが許可されている場合とそうでない場合がありますか?

私はgoogleとSOを検索しましたが、これに答える質問は見つかりませんでした。

BOTH Cと私は意図的にも意図的にもタグ付けしました。

+10

あなたは、あなたが本当に言語のための決定的な文法を使用する必要があるパーサを作成しようとしている場合(つまり標準(S)) 、ここで虚偽の人間によって与えられた答えに頼るのではなくて! –

+0

Googleを試してみましたか? – xaxxon

+3

はい、Googleを試しました。それはそうだ、その質問の中にある。 – Wug

答えて

11

プリプロセッサディレクティブは、ライン上の最初の空白以外のトークンであればどこにでも置くことができます。したがって、あなたは

int i; #define ThisIsntLegal SinceItsNotAtTheStart 

を書き込むことはできません。しかし、これは次のようになります。

int i; 
#define Woohoo ThisIsLegal 

は、この情報がお役に立てば幸い!

C11 Standard (N1570, ISO/IEC 9899:201x)(関連セクション:s6.10 Prerocessingディレクティブ、ページ160)

+0

これを示すリソースへのリンクがありますか? Anecdotalは "コンパイラでそれを投げ、それが何をするかを見る"というテストがこれをサポートしているが、私はそれを書いてみたい。 :D – Wug

+0

@Wug:私が上で示唆したように、これを書面で見つける場所は言語標準です;) –

+1

+1。標準リンクが必要な場合* C11 s6.10前処理指令* – simonc

関連する問題