編譯器預處理實現

2021-07-16 12:12:55 字數 1033 閱讀 4405

我們寫**一般都會寫一些注釋,為了讓人更好的理解**,但是對於編譯器來說,這些注釋都需要去除,為了實現預處理,就是去除注釋、換行、回車等,我用dfa(確定有限自動機

)來實現。

#include #include  using  namespace std;

#define r 10

#define c 8

//dfa

int dfa[r][c]= \

, /*1*/,

/*2*/,

/*3*/,

/*4*/,

/*5*/,

/*6*/,

/*7*/,

/*8*/,

/*9*/

};//字元轉碼

int code(char ch)

return chars;

}//判斷是空格、tab、回車、換行等

int judge(char curch)

void pretreat(const char*src, const char *des)

else if(code(curch) == 1)

if(judge(curch)&& space == 0)

//else

//space = 1;

break;

}else if(judge(curch)&& space == 1)

else

case 6:

case 7:

case 8:

case 9:

wbuffer[j++] = curch;break;

} prestate = curstate;

prech = curch;

i++;

} outfile

delete wbuffer;

infile.close();

outfile.close();

}int main()

編譯器預處理 ifndef 條件編譯

這是 if not defined的簡寫,是巨集定義的一種,它是可以根據是否已經定義了乙個變數來進行分支選擇,一般用於除錯等等。實際上確切的說這應該是預處理功能中三種 巨集定義,檔案包含和條件編譯 中的一種 條件編譯。define x 定義乙個巨集 endif c語言在對程式進行編譯時,會先根據預處...

LLVM 編譯器學習筆記之六 預處理

1 llvm 中使用builder.definemacro定義builtin巨集,類似gcc的builtin define,以下是llvm8 中定義對gcc 4.2.1版本相容性巨集 gnuc 的示例 配套的介面還有ismacrodefined及undefinemacro 2 巢狀優先順序 在 bu...

預處理器,編譯器,彙編器,聯結器

1.2程式被其它程式翻譯成不同的格式 hello程式的生命週期是從乙個源程式 hello.c 稱為高階c語言 開始,被其它程式轉化為一系列的低階機器語言指令,這些指令按照一種稱為可執行目標程式的格式打包好,以二進位制磁碟檔案的形式儲存。例 unix gcc o hello hello.c可以實現原始...