資源簡介
編譯原理C語言實現詞法分析程序帶容錯處理!

代碼片段和文件信息
#include
#include
#include
#define?_KEY_WORD_END?“waiting?for?your?expanding“
typedef?struct
{
??int?typenum;
??char?*?word;????????
}WORD;
char?input[255];
char?token[255]=““;
int?p_input;
int?p_token;
char?ch;
char?*?rwtab[]={“begin““if““then““while““do““end““_KEY_WORD_END“};
WORD*?scaner();
int?main()
{
?aaa:
????fflush(stdin);??
??int?over=1;
??WORD*?oneword=new?WORD;
??printf(“Enter?Your?words(end?with?#?):“);
??scanf(“%[^#]s“input);
??p_input=0;
??printf(“Your?words:\n%s\n“input);
??while(over<1000&&over!=-1)
??{
????oneword=scaner();
????if(oneword->typenum<1000)
????printf(“(%d%s)“oneword->typenumoneword->word);
????over=oneword->typenum;??????????????????????????
??}?????
??printf(“\n?if?you?want?out?press?any?key?to?exit?or?press?N?go?no?:“);
??fflush(stdin);
??char?abc=getchar();
??
??if?(abc==‘N‘)
???goto?aaa;
}
char?m_getch()
{
??ch=input[p_input];
??p_input=p_input+1;
??return?(ch);?????
}
void?getbc()
{
???while(ch==‘?‘||ch==10)
???{
?????ch=input[p_input];
?????p_input=p_input+1;?????????????????????
???}?????
}
void?concat()
{
??token[p_token]=ch;
??p_token=p_token+1;
??token[p_token]=‘\0‘;?????
}
int?letter()
{
??if(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘)return?1;
??else?return?0;????
}
int?digit()
{
????if(ch>=‘0‘&&ch<=‘9‘)return?1;
????else?return?0;????
}
int?reserve()
{
??int?i=0;
??while(i<6&&(strcmp(rwtab[i]_KEY_WORD_END)))??
??{if(i<6&&(!strcmp(rwtab[i]token)))
??????return?i+1;???
???i=i+1;?????????????????????????????
??}
??return?10;
}
void?retract()
{
??p_input=p_input-1;?????
}
char*?dtb()
{
???return?NULL;??????
}
WORD*?scaner()
{
??WORD*?myword=new?WORD;
??myword->typenum=10;
??myword->word=““;
??p_token=0;
??m_getch();
??getbc();
??if(letter())
??{
????while(letter()||digit())?????????????
????{
???????concat();
???????m_getch();?????????????????????????????????????
????}??
????retract();
????myword->typenum=reserve();
????myword->word=token;
????return?(myword);
??}???
??else?if?(digit()){
???????while(digit()){
????????????concat();
????????????m_getch();??????????
??????????????????????
??????????????????????}
????????retract();
????????myword->typenum=20;
????????myword->word=token;
????????return(myword);?????????????
???????
???????}?
??else?switch(ch)
??{
????case‘=‘:?m_getch();
????if(ch==‘=‘)
????{
??????myword->typenum=39;
??????myword->word=“==“;
??????return?(myword);????????
????}????
????retract();
????myword->typenum=21;
??????myword->word=“=“;
??????return?(myword);
??????break;
????case?‘+‘:????myword->typenum=22;
?????????????????myword->word=“+“;
?????????????????return?(myword);
?????????????????break;
????case?‘-‘:????myword->typenum=23;
?????????????????myword->word=“-“;
?????????????????return?(myword);
?????????????????break;
????case?‘*‘:????myword->typenum=24;
?????????????????myword->word=“*“;
???????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????5848??2013-10-10?22:09??cifa.cpp
?????文件???????49117??2013-10-10?22:09??cifa.exe
- 上一篇:非遞歸預測分析;C++實現LL1文法分析
- 下一篇:自制c語言編譯器
評論
共有 條評論