質問

C / C ++コンパイラは、ソースコードのエスケープ文字[" \"]をどのように操作しますか?その文字を処理するためのコンパイラの文法はどのように書かれていますか?その文字に遭遇した後、コンパイラは何をしますか?

役に立ちましたか?

解決

ほとんどのコンパイラは複数の部分に分かれています。コンパイラのフロントエンドは、字句解析器またはスキャナー。コンパイラのこの部分は、実際の文字を読み取り、トークンを作成します。エスケープ文字を見たときに、それが本物であるか(たとえば、文字列内に表示される場合)、次の文字を変更するかを決定するステートマシンがあります。トークンは、それに応じて、コンパイラの次の部分(パーサー)。ステートマシンは、複数の文字をトークンにグループ化できます。

他のヒント

このテーマに関する興味深いメモは、 Onです。 Trusting Trust [PDFリンク]

このペーパーでは、コンパイラがこの問題を正確に処理する1つの方法について説明し、c-written-in-cコンパイラがコードをASCII値に明示的に変換しないことを示します。また、新しいエスケープコードをコンパイラにブートストラップして、新しいコードのASCII値の理解も暗黙的に行う方法。

通常、次の文字をエスケープします。

  • 文字列リテラルまたは文字リテラルでは、次の文字をエスケープすることを意味します。 \ a は「警告」(端末の点滅、ビープ音など)を意味し、 \ n は「改行」を意味し、 \ xNUM は16進数を意味しますたとえば。
  • 改行内の最後の可視文字として表示される場合、文字列内か否かにかかわらず(そして行全体のコメント内であっても!)、行継続として機能します:次の改行文字は無視され、次の行は現在の行とマージされます。

次の文字を含むエスケープ文字( \ n など)はCコンパイラの単一文字です-スキャナーは文字トークンとしてパーサーに提示するため、パーサーの特別な構文規則は必要ありません。エスケープ文字。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top