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