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

LR语法分析器 北邮 编译原理 实验

来源:网络收集 时间:2018-12-27 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

/*******************************************************************************

Title(c++): LR语法分析器.cpp

Author: volantfish num:10211xxx Class:2010211309 Date: 2012.11 (volantfish)

Introduction:

Version:

*******************************************************************************/

#include #include #include #include #include #include #include #include

using namespace std;

//#define DEBUG_

//枚举常量:用来表示LR分析表中表项的状态

enumformStyle{SHIFT, REDUCE, ACCEPT, GOTO, ERROR};

//the element of result of lexical analysis classWordEle { public: WordEle():style(-1), real(\ WordEle(intst, string re):style(st), real(re){} int style; //the string real; // };

//the element of the form classformEle {

public: formStyle style; //enum intnum; //the number of production. };

//the element of stack classstackEle { public: stackEle():state(-1), ch(-1){} stackEle(intst, int c):state(st), ch(c){} int state; //the number of state. intch; //the number of character. };

/*Global variable*/

mapcharNum; //char->number vectornumChar; //number->char vectorproListL; //the left side of productions vector>proListR; //the right side of productions vectorwordList; //the list of result of lexical analysis map, formEle> form; //the action and goto form /**

* Description: 打印此刻的分析动作

* Arguments: 输入此刻分析表的一个元素 * Returns: 用string表示的分析动作 */

stringPrintOption(constformEle&formTemp) { string output;

char charTemp[100]; //装门用于atoi()函数的参数,没有其他作用

if(formTemp.style == SHIFT) { output += \ output += itoa(formTemp.num, charTemp, 10); } else { if(formTemp.style == REDUCE) { output += \

output += numChar.at(proListL.at(formTemp.num)); output += \ vectorvecTemp = proListR.at(formTemp.num); for(vector::iterator i = vecTemp.begin(); i != vecTemp.end(); ++i) { output += numChar.at(*i); } } else { if(formTemp.style == ACCEPT) { output = \ } } } return output; } /**

* Description: 打印未处理的输入串

* Arguments: 输入字符串的迭代器,指向正在处理的字符 * Returns: 未处理的输入串 */

stringPrintInput(vector::const_iteratoriterWord) { string output; for(; iterWord != wordList.end(); ++iterWord) { output += iterWord->real; } return output; } /**

* Description: 打印栈的全部元素 ~ * Arguments: 栈

* Returns: 储存栈元素的string

*/

stringPrintStack(const list&st) { char charTemp[100]; //装门用于atoi()函数的参数,没有其他作用 string output; // for(list::const_reverse_iterator i = st.rbegin(); i != st.rend(); ++i) { output += numChar.at(i->ch); output += itoa(i->state, charTemp, 10); } return output; } /**

* Description: LR语法分析主程序 * Arguments: * Returns: */

voidGramAna() { vector::const_iteratoriterWord = wordList.begin(); //指向当前正在处理的字符 listst; //stack used in the analysis st.push_front(stackEle(0, charNum[\//在栈底压入状态0 formEleformTemp; //充当中间变量的角色 printf(\语法分析过程*********************\\n\ printf(\ 栈输入分析动作 \\n\ //printf(\ %-15s\\n\ // PrintInput(iterWord).c_str(), PrintOption(formTemp).c_str()); while(iterWord != wordList.end()) { formTemp = form[make_pair(st.front().state, iterWord->style)]; if(formTemp.style == SHIFT) // 移进 { printf(\ %-15s\\n\ PrintInput(iterWord).c_str(), PrintOption(formTemp).c_str()); st.push_front(stackEle(formTemp.num, iterWord->style)); ++iterWord; }

else { if(formTemp.style == REDUCE) // 归约 { printf(\ %-15s\\n\ PrintInput(iterWord).c_str(), PrintOption(formTemp).c_str()); for(vector::size_type i = 0; i < (proListR.at(formTemp.num)).size(); ++i) { st.pop_front(); } intiTemp = form[make_pair(st.front().state, proListL.at(formTemp.num))].num; st.push_front(stackEle(iTemp, proListL.at(formTemp.num))); } else { if(formTemp.style == ACCEPT) // 接受,分析成功 { printf(\ %-15s\\n\ PrintInput(iterWord).c_str(), PrintOption(formTemp).c_str()); cout<< \ ++iterWord; } else //error processing { cout<< \ ++iterWord; } } } }//end of while(iterWord != wordList.end()) } /**

* Description: 词法分析程序

* Arguments: 未经处理的输入符号串 * Returns: */

voidLexiAna(const string inputStr) { string::const_iteratoriter = inputStr.begin();

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库LR语法分析器 北邮 编译原理 实验在线全文阅读。

LR语法分析器 北邮 编译原理 实验.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/390538.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: