小詞法分析器

2021-06-01 05:36:04 字數 2898 閱讀 3253

今天編譯上完了第三章。所以照著書上第三章詞法分析程式的框架,花了兩個小時,實現了種個函式的具體**,加除錯。沒有寫什麼注釋,相關函式的說明在書上。除錯的過程留在程式上在。

在工程目錄下的input.txt是詞法分析的輸入檔案,執行完程式後,會在工程目錄下生成output.txt檔案是詞法分析的結果。

程式只能識別一部份的字元。出錯處裡也寫得很簡單,全域性變數也太多。

下面是源**,供以後複習之用。

#include #include #include #define key_world_count 7

char ch;

char token[30];

file * pread = fopen("input.txt","r");

file * pwrite= fopen("output.txt","w+");

void getch();

void getbc();

void concat();

bool letter(char);

bool digit(char);

int reserve();

void retract();

void return_(int,char *);

char * dtb(char *);

void error_();

char * key_world_table=;

void scaner()

retract();

int kind=reserve();

return_(kind,token);

} else if (digit(ch))

retract();

return_(11,dtb(token));

} else

': return_(27,"}");

break;

case '+' :

return_(13,"+");

break;

case '-':

return_(14,"-");

break;

case '*':

return_(15,"*");

break;

case '/':

return_(16,"/");

break;

case '<':

getch();

if (ch=='=')

return_(17,"<=");

else if (ch == '>')

return_(18,"<>");

else

break;

case '=':

return_(28,"=");

break;

case ':':

getch();

if (ch == '=')

return_(22,null);

else

break;

case ';':

return_(23,";");

break;

default:

error_();

} }

}void main()

//debug getch(),getbc()

// getch();

// printf("%c\n",ch);

// getch();

// getbc();

// printf("%c\n",ch);

//debug concat()

// strcpy(token,"feng");

// printf("%s\n",token);

// getch();

// concat();

// printf("%s\n",token);

//debug letter(),digit();

// printf("%d\n",letter('a'));

// printf("%d\n",digit('a'));

//debug reserve()

// strcpy(token,"while");

// printf("%d\n",reserve());

// strcpy(token,"whilee");

// printf("%d\n",reserve());

//debug retract()

// getch();

// printf("%c\n",ch);

// retract();

// getch();

// printf("%c\n",ch);

//debug return_

// return_(2,"feng");

// return_(3,"cheng");

//deubg dtb();

//出了一點小問題,當函式的返回值是字元指標時,

//下乙個函式利用dtb()返回的指標,但dtb()幾經執行完,

//記憶體被系統**了,就回出現不是原值的情況

//在binnum[32]前面加上static使其記憶體分配在堆上就可以了

// printf("%s\n",dtb("127"));

// return_(3,dtb("25"));

//debug error_();

// getch();

// error_();

}void getch()

}void getbc()

}void concat()

*p=ch;

p++;

*p='\0';

}bool letter(char ch)

bool digit(char ch)

int reserve()

{ for (int i=0;i

詞法分析器

這是我自己的第一篇部落格,就分享一下最近才做完的編譯原理實驗,詞法分析器。本次實驗中我用mysql資料庫儲存自動機狀態表,這樣做的目的只是為了在後續的課設中可以繼續使用現在的 這一段 並不是太完善,發出來只是為了太完善。裡面還有很多問題,比如對字元和字串的識別,不知道為什麼資料庫無法將 和 轉換到我...

詞法分析器

include using namespace std const int maxn 1e3 10 int n 輸入文字的行數 char buffer maxn maxn 緩衝區 int len maxn 輸入文字每行的列數 struct out 輸出格式 out string a,int b re...

詞法分析器

簡單的詞法分析器 標題 南山荒野客 20 05 2019 詞法分析器 編譯原理 c 語言 include include includechar prog 80 token 6 char ch int syn,p,m 0,n,row,sum 0 int biaoji 0 char rwtab 18 ...