本文主要是介绍学习使用的PL/0编译器增强版PL/0plusplusCompiler(五)使用代替#不等于号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路就是在检测小于号时检测一下如果后边为大于号就把当前的token组合识别为不等于号。
/*词法分析,获取一个符号
*/int getsym()
{int i,j,k;while( ch==' '||ch==10||ch==9){getchdo;}if(ch>='a'&&ch<='z'){ k=0;do{if(k<al){ a[k]=ch;k++;}getchdo; }while(ch>='a'&&ch<='z'||ch>='0'&&ch<='9');a[k]=0;strcpy(id,a);i=0;j=norw-1;do{k=(i+j)/2;if(strcmp(id,word[k])<=0){j=k-1;}if(strcmp(id,word[k])>=0){i=k+1;}}while(i<=j);if(i-1>j){sym=wsym[k];}else{sym=ident;}}else{if(ch>='0'&&ch<='9'){k=0;num=0;sym=number;do{num=10*num+ch-'0';k++;getchdo;}while(ch>='0'&&ch<='9'); /*获取数字的值*/k--;if(k>nmax){error(30);}}else{if(ch==':') /*检测赋值符号*/{getchdo;if(ch=='='){sym=becomes;getchdo;}else{sym=nul; /*不能识别的符号*/}}else{if(ch=='<') /*检测小于或小于等于符号*/{getchdo;if(ch=='='){sym=leq;getchdo;}else{if(ch=='>'){ /*检测不等于号*/sym=neq;getchdo;}else{sym=lss; }}}else{if(ch=='>') /*检测大于或大于等于符号*/{getchdo;if(ch=='=') {sym=geq;getchdo;}else{sym=gtr;}}else{ sym=ssym[ch];/* 当符号不满足上述条件时,全部按照单字符号处理*///getchdo;//richardif(sym!=period){getchdo;}//end richard}}}}}return 0;
}
这篇关于学习使用的PL/0编译器增强版PL/0plusplusCompiler(五)使用代替#不等于号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!