if(!strcmp (StrToken,word[i])) {
return i+1; } }
return 0; }
int Op(char c) {
switch(c) {
case '=':return 8;break; case '+':return 9;break; case '*':return 10;break; case ',':return 12;break; case '(':return 13;break; case ')':return 14;break; default :return 0;break; } }
void Concat(char *StrToken,char in)//connat a signal to a string {
char *temp=new char[1]; temp[0]=in;
strcat(StrToken,temp); }
void main() {
int i;
cout<<\ cin.getline(String,50); int length=strlen(String);
cout<<\:\ cout<<\characterisitc\
while(IsBc(String[point])) {
point++; }
i=point; do {
while(IsBc(String[i])) {
10
i++; }
point=i;
Readc(ch,String[i]); char *te=new char[2]; te[0]=ch;
strcpy(StrToken,te); StrToken[1]='\\0';
if (IsLetter(String[i]))//the first is letter {
int j=i+1;
while((IsLetter(String[j])||IsDigit(String[j]))&&j Concat(StrToken,String[j]); StrToken[j-i+1]='\\0'; j++; } if(KeyWord(StrToken)) { cout<<\ \ } else { Node *node=(Node *)new Node; node->Set(StrToken,6,ip); Iden->Push(node); cout<<\ \ } i=j; }// end letter else if(IsDigit(String[i]))// the first is digit { int j=i+1; while(IsDigit(String[j])&& j Concat(StrToken,String[j]);//concat to strToken StrToken[j-i+1]='\\0'; j++; } Node *node=(Node *)new Node; node->Set(StrToken,7,cp); Const->Push(node); 11 cout<<\\>\ i=j; }//end digit else if(Op(String[i]))// the first is ope { switch (Op(String[i])) { case 8: case 9: case 12: case 13: case 14:cout<<\ \ case 10: { if(String[i+1]=='*') { i++; Concat(StrToken,'*'); cout<<\ \ } else cout<<\ \ } break; } i++; }// end op else //other { i++; cout<<\无此种单词符号。>\ } }while(String[i]!='#'); cout<<\ cout<<\ Iden->Disp(); cout<<\ cout<<\ Const->Disp(); cout<<\} 12 (3)运行结果 13 2.算符优先分析程序设计 (1)流程图 开始 输出优先关系表 输入字符串 ‘#’压栈 当前字符为Y 栈中为N ‘#’ ? “#N#” 不是句子 N Y 栈顶终结符与当前字出栈 符比较 N 是句子 大于? Y 结束 规约 入栈 下一个字符 14