1、词法语法语义分析器代码#include #include using namespacestd;void scaner();void checkIDF();void checkNum();void retract();char getChar(); void concatenation(); int reserve();void buildlist1();void buildlist2();void error();bool letter();bool digit();/扫A ?描0/检查e是否?是?保馈?留?字?/检查e是否?是?数簓字?/ 回?退 ?/ 获?取?下?一?个?字?符?/连?接
2、6字?符?/检查e是否?是?保馈?留?字?/建立i ?标括?识?符?表括?II建立i ?数簓字?表括?/ 报馈?错洙 ?II 字?母 ?II 数簓字 ?char character80,token8,ch,tk4; /character 数簓组哩?保馈?存?输?入?的?所 d 有瓺字符? toke n 当獭?前要癮检查e的?字?符 ?int sy,syn,pt,pc,pL1=0,pL2=0,p5,p6; /syn 种?别纄编括 ?码? pt token 数簓组哩 ?下?标括? pccharacter 数簓组哩 ?下?标括? pL1 标括?志?符?表括?下?标括? pL2 数簓字?表括?下?标括
3、?vector list1; / 标括?志 ?符?表括vector list2; / 数簓字 ?表括 ?void scaner()pt=0;for (int i=0;i8;i+)tokeni=NULL;char s=getChar();while (s= )|(s= n )s=getChar();if (s=a )|(s= A )checkIDF();else if (s= 0 )&(s :syn=14;s=getChar();if (s= = )sy=3;strcpy(token, relop ); strcpy(tk, ME);elsesy=2;retract();strcpy(token
4、, relop ); strcpy(tk, MT);break ;case :syn=14;s=getChar();if (s= = )sy=5;strcpy(token, relop ); strcpy(tk, LE );elsesy=4;retract();strcpy(token, relop ); strcpy(tk, LT );break ;case!s=getChar();if(s= )syn=14;strcpy(token, relopstrcpy(tk, UEQ);else retract();coutvv 第台?vvp5v句?第台?vvp6v 个?字?符?!=; error(
5、);break ;case ; : syn=15;tokenpt=break ;case, : syn=16; tokenpt= , ; break ;case( : syn=17; tokenpt= ( ; break ;case) : syn=17; tokenpt= ) ; break ;case& : s=getChar(); if (s= & ) syn=18; strcpy(token, & ); else retract();COUtvv 第台?vvp5v 句?第台?vvp6v 个?字?符?&; error();break ;Case| :s=getChar();if (s= |
6、 )syn=19;strCpy(token, | );elseretraCt();COUtvv 第台?vvp5v 句?第台?vvp6v 个?字?符 ?&; error();break ;defaUlt :COUtvv 第台?vvp5v句?= 0 & tokeni = 9 ; +i)n = 10 * n + (tokeni - 0 );list2.push_back(n);pL2+;void error()coutvv岀?现?错洙?误 6 endl;bool letter()char s=characterpc-1;if (s=a )|(s=A )return true ;elsereturn
7、falsebool digit()char s=characterpc-1;if (s= 0 )&(s= 9 ) return true ;elsereturn false ;#include using namespacestd;int lookahead; / 当獭 ?前种 ?别纄编括 ? 码 ?int a1,v,p7,p8; a1 pa数簓组哩?下?标括? v=0表括?示?(辍? v=1 表括?示?)?int pa1002; /第台?一?维?保馈?存?单蹋?词洙?的?种?别纄编括?码?第台?二上维?用?来厉?区?分?种?别纄编括?码?相0同?的?单蹋?词洙?int nexttoken()
8、; / 下?一?个?单蹋 ?词洙?的 ?种?别纄编括 ?码? void match(); void S(); void A();void Op(); void B();void relop(); void E();void E1(); void T();void T1(); void F();void p();void error1();int nexttoken()v=pa+a11;int paa=paa10;p8+;if (paa=15)p7+;P8qreturn pao)1=0void maoh( inf f)宀if (-ookaheadHU宀-ookaheadunex 存 okenpe-se宀errorlp void s() 宀if (-ookaheaduul)宀COUAC-SV whi-e(A) s= Acendrmaoh(1if (ookaheadHH17QOQOVHHO)宀maoh(17Ape-se宀COUAC -Mn7AAP7 久-5r7- AA-MnAAAA-45 s 7煎欽 77A7AAP8A7 也 7Merrorlpe-se if (-00kaheadHH6=-00kaheadHH7) 宀
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1