第一范文网 - 专业文章范例文档资料分享平台

天津理工大学编译原理实验3:语义分析及中间代码生成

来源:用户分享 时间:2025/8/26 14:19:18 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

p--; char second=state_stack[p]; int i=getraw(second); int j=getcol('T'); char c_out=getraw_content(table[i][j]); cout<<\用T-->F规约且\ popstack(state_stack,pointer_state,1); popstackc(stack,pointer,1); char c='T';//str[(*index)]; pushstack(stack,pointer,state_stack,pointer_state,c,c_out,1); stack[(*pointer)].endchar=s;//将记录下的变量赋值给规约后的字符 }

else if(production==\ { int po=(*pointer);//用P规约该表达式,有效变量在E的endchar中,需要找到E的位置,即下面的操作 string sf=stack[po].endchar;//对应 F po-=2; string sp=stack[po].endchar;//在规约之前记录下要规约的字符所代表的变量。对应 P tsize++;//新增临时变量 t[tsize].num=tsize+1;//下面四个表达式是按照上面的规约式进行的赋值 t[tsize].operate='^'; t[tsize].var1=sp; t[tsize].var2=sf; cout<<\ int p=(*pointer_state); p-=3; char second=state_stack[p]; int i=getraw(second); int j=getcol('F'); char c_out=getraw_content(table[i][j]); cout<<\用F-->P^F规约且\ popstack(state_stack,pointer_state,3); popstackc(stack,pointer,3); char c='F';//str[(*index)]; pushstack(stack,pointer,state_stack,pointer_state,c,c_out,1); string s=get_tx(t[tsize].num); stack[(*pointer)].endchar=s;//把保存P^F规约的结果的变量保存至当前字符的终结符 }

else if(production==\ {

int p=(*pointer_state); p--; char second=state_stack[p]; int i=getraw(second); int j=getcol('F'); char c_out=getraw_content(table[i][j]); cout<<\用F-->P规约且\ string s=stack[(*pointer)].endchar;//在规约之前记录下要规约的字符所代表的变量 popstack(state_stack,pointer_state,1); popstackc(stack,pointer,1); char c='F';//str[(*index)]; pushstack(stack,pointer,state_stack,pointer_state,c,c_out,1); stack[(*pointer)].endchar=s;//将记录下的变量赋值给规约后的字符 }

else if(production==\ { int p=(*pointer_state); p-=3; char second=state_stack[p]; int i=getraw(second); int j=getcol('P'); char c_out=getraw_content(table[i][j]); cout<<\用P-->(E)规约且\ int po=(*pointer);//用P规约该表达式,有效变量在E的endchar中,需要找到E的位置,即下面的操作 po--; string s=stack[po].endchar;//在规约之前记录下要规约的字符所代表的变量 popstack(state_stack,pointer_state,3); popstackc(stack,pointer,3); char c='P';//str[(*index)]; pushstack(stack,pointer,state_stack,pointer_state,c,c_out,1); stack[(*pointer)].endchar=s;//将记录下的变量赋值给规约后的字符 }

else if(production==\ { int p=(*pointer_state); p--; char second=state_stack[p]; int i=getraw(second);

int j=getcol('P'); char c_out=getraw_content(table[i][j]); cout<<\用P-->i规约且\ popstack(state_stack,pointer_state,1); popstackc(stack,pointer,1); char c='P';//str[(*index)]; pushstack(stack,pointer,state_stack,pointer_state,c,c_out,1); stack[(*pointer)].endchar=\ }

else if(production==\ { cout<<\分析成功\ (*index)++; } }

int main() {

char str[size];//接受字符串的数组 char_stack stack[size];//进行比对的栈 int pointer=-1;//指向栈顶的指针 int length=0;//记录字符串长度 int index=0;//记录输入字符串 char top;

char state_stack[size];//状态栈 int pointer_state=-1;//状态栈指针 int i,j;//i表示行,j表示列 string production; bool match=false;

cout<<\ cin>>str;

length=getLength(str); str[length]='#'; str[length+1]='\\0'; pointer++;

stack[pointer].content='#'; pointer_state++;

state_stack[pointer_state]='0';

cout<<\步骤\\t状态栈\\t符号栈\\t当前符号\\t输入串\\t四元式\\t\\t说明\ while(str[index]!='\\0') { top=gettop(state_stack,pointer_state);//获取状态栈栈顶元素 i=getraw(top); j=getcol(str[index]); production=table[i][j]; switch_method(stack,&pointer,state_stack,&pointer_state,production,str,&index);

}

return 0; }

上面的运行结果是根据文法产生的下面的语法树的语句

天津理工大学编译原理实验3:语义分析及中间代码生成.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6tiex6p52i5zpak1cslt1is530855j00ibw_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top