資源簡介
用C++實現的無符號數的詞法分析程序。

代碼片段和文件信息
#include
#include
#include
#include
using?namespace?std;
int?w=0;??//尾數累加器?
int?p=0;??//指數累加器?
int?j=0;??//十進制小數位數計數器?
int?e=1;??//用來記錄十進制數的符號,當指數為正時為1,為負時為-1????
int?i=0;??//用來標志元素位置?
int?d=0;??//用來表示每個數值型元素對應的數值?
const?int?N=40;//用來確定輸入識別符的最大長度
char?data[N];//存放輸入的識別符?
bool?is_digit;?//標志是否是數字?
string?CJ1;//確定是整形還是實型?
double?CJ2;//記數值?
//函數聲明?
void?check(char?c);//檢查首字母是否是數字的函數?
void?deal_integer(char?c);//處理識別符的整數部分?
void?deal_point(char?c);//用來處理小數部分?
void?deal_index(char?c);//用來處理指數部分
void?s_next();//?確定實型?
void?z_next();//確定整型?
void?last();//?計算?CJ2
void?error();//程序中錯誤處理程序?
void?deal();//處理函數主體?
int?main(){??//主函數?
????
????cout<<“please?input?your?dataand?its?maximum?length?is?“< ????cin>>data;
????deal();//處理函數主體?
????last();//?計算?CJ2
????system(“pause“);
????return?0;
????}
????
????
??void?check(char?c)?//判斷輸入的首字母是否是數字?
??????{?????
????????is_digit=isdigit(c);
?????????while(is_digit!=true){//輸入的首字母不是數字時?
??????????cout<<“\nError!?Try?again..“< ??????????cin>>data;
??????????check(data[0]);
??????????}
??????}
??????
???void?deal_integer(char?c){//處理識別符的整數部分?
????????d=(int)c-48;
????????w=w*10+d;
????????i++;
????????if(isdigit(data[i])!=0)//下一個仍是數值時,調用程序本身?
??????????????deal_integer(data[i]);
????}
???
???void?deal_point(char?c){//用來處理小數部分?
????????int?temp=i;
????????if(isdigit(c)!=0)//是數值字符時?
?????????????deal_integer(c);?
??????????????????????
????????else
????????????{?error();?//錯誤處理程序
??????????????deal();//處理函數主體
????????????}
????????j=i-temp;//記錄十進制小數位數?
????????}
????????
??void?deal_index(char?c){//用來處理指數部分
???????if(c==‘-‘)??{e=-1;i++;}//是‘-‘號時?
???????else???{if(c==‘+‘)?i++;//是‘+‘?號時?
???????????????else?{
????????????????????if(isdigit(c)==false)?//非數值字符時??
???????????????????????????{???error();//錯誤處理程序
???????????????????????????????deal();//處理函數主體
???????????????????????????}
???????????????????????????????????????????
????????????????????else
??????????????????????{?d=(int)c-48;//把輸入字符轉換為整型?
????????????????????????goto?pro2;}
??????????????????????}
??????????????}
???if(isdigit(data[i])!=0)
pro1:???d=(int)(data[i])-48;
pro2:???p=p*10+d;
????????i++;
???????if(isdigit(data[i])!=0)//是數值字符時?
???????????goto?pro1;????
???????else?if(data[i]!=‘\0‘){//非結束標志?
???????????????error();//錯誤處理程序
???????????????deal();//處理函數主體
?????????????}
???????????else?s_next();?//?確定實型????
??}
void?s_next(){//?確定實型?
???????i--;//退一個字符?
???????CJ1=“實型“;
???????}
void?z_next(){//確定整型?
?????i--;//退一個字符?
?????CJ1=“整型“;
?????}
void?last(){//?計算?CJ2
?????CJ2=w*pow((double)10e*p-j);
?????cout< ?????}
void?error(){//程序中錯誤處理程序?
?????cout<<“\nError!?Try?again..“< ?????cin>>data;
?????p=0;w=0;j=0;?//所有全局變量重新初始化?
?????e=1;i=0;d=0;
?????//exit(0);
?????}
?????
void?deal(){
????check(data[0]);//判斷輸入的首字母是否是數字
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4348??2008-06-04?15:38??wfhs.cpp
-----------?---------??----------?-----??----
?????????????????4348????????????????????1
- 上一篇:VC2010中文教學版
- 下一篇:C++ 高效 屏幕找圖 函數源碼
評論
共有 條評論