• 大小: 2.04MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-04
  • 语言: 其他
  • 标签:

资源简介

编译原理——for循环语句的翻译,LR,四元式,有报告

资源截图

代码片段和文件信息

#pragma warning (disable : 4786)//禁止使用模版而产生的警告
#include
#include
#include
#include
#include
#include
#include“change.h“//类型转换模板函数所在的头文件
#include“词法分析.h“//词法分析程序及类Token所在的头文件
using namespace std;

class newTemp   //用来产生中间变量t1,t2...
{
public:
newTemp():tempNum(1) {};//构造函数
string getNewTemp()//得到一个临时变量
{
return “t“+toString(tempNum++);
}
private:
int tempNum;
};
struct NodeInfor//每个非终结符的链信息
{
int TrueOrChain;//真的链号,或者为句子的chain
int FalseOrEnd;
int codeBegin;
};
stack sState;//状态栈
stack sNotation;//字符栈
deque sInputToken;//输入串队列存放的是单词结点
deque TokenTable;//Token队列单词结点和编号
stack sLang;//语义栈
stack sNodeInfor;//每个非终结符的链信息栈在语义分析的时候存储与回填与拉链相关信息

map< pair string> ActionTable;
map< pair int> GotoTable;
map< intint > deduceTableLength;//产生式表<编号,右部长度>>
map< intstring> deduceTableLeft;//产生式表<编号,左部>
map > objectCode;//存储目标代码的图,<编号 <四元式回填地址>>

newTemp newTempVar;//中间变量每调用一次产生一个新的中间变量
int nextstat=100;//指向一个四元式的地址
int LastGotoAddress;//记录最后个Goto的回填地址

//-------------------建立输入输出文件流--------------
ifstream InputAction(“action.txt“ios::in);
ifstream InputGoto(“goto.txt“ios::in);
ifstream InputDeduceLength(“deduceTableLength.txt“ios::in);//从文件输入产生式表<编号,右部长度>>
ifstream InputDeduceLeft(“deduceTableLeft.txt“ios::in);//从文件输入产生式表<编号,左部>
ifstream token(“LEXoutput.txt“ios::in);//对Token的初始化
//----------------------------------------------------------------------------
void initTable()//初始化action表,goto表,输入串队列,产生式表
{
string strTemp1strTemp2strTemp3;
int intTemp1intTemp2;
while(InputAction>>intTemp1>>strTemp1>>strTemp2)//初始化action表
ActionTable.insert ( pair string>(pair(intTemp1strTemp1) strTemp2) );

while(InputGoto>>intTemp1>>strTemp1>>intTemp2)//初始化,goto表
GotoTable.insert (pair int>(pair(intTemp1strTemp1) intTemp2) );

while(InputDeduceLength>>intTemp1>>intTemp2)//初始化产生式表<编号,右部长度>>
deduceTableLength.insert (pair(intTemp1intTemp2) );

while(InputDeduceLeft>>intTemp1>>strTemp1)//初始化产生式表<编号,左部>
deduceTableLeft.insert (pair(intTemp1strTemp1) );
while(token>>intTemp1>>strTemp2>>strTemp3)
{
if(intTemp1==1)//如果为“标识符“直接压入id
sInputToken.push_back (“id“);
else if(intTemp1==2||intTemp1==3)//如果为“整型““实型“直接压入num
sInputToken.push_back (“id“);
else //否则直接压入
sInputToken.push_back (strTemp3);
TokenTable.push_back (Token(intTemp1strTemp3));
}
InputAction.close();
InputGoto.close();
InputDeduceLength.close();
token.close ();
}
map >::iterator backpatch(int objPatchint num)//回填函数把objPatch所链接的每一个四元式的都改为num
{
map >::iterator iter=objectCode.find(objPatch);
while( iter != objectCode.end())//如果存在地址号为objPatch的地址码号
{
iter->second.first += toString(num);//回填

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2114  2010-01-06 20:35  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\action.txt

     文件        288  2010-01-07 10:16  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\change.h

     文件    1294601  2010-01-05 21:20  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\Debug\for循环翻译.obj

     文件     173056  2010-01-08 20:00  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\Debug\vc60.idb

     文件     307200  2010-01-08 12:00  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\Debug\vc60.pdb

     文件     738304  2010-01-06 14:20  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\Debug\语法分析.bsc

     文件     819316  2010-01-08 20:00  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\Debug\语法分析.exe

     文件    1180252  2010-01-08 20:00  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\Debug\语法分析.ilk

     文件    1279713  2010-01-08 20:00  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\Debug\语法分析.obj

     文件    3505812  2010-01-07 15:03  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\Debug\语法分析.pch

     文件    1672192  2010-01-08 12:00  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\Debug\语法分析.pdb

     文件          0  2010-01-06 14:20  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\Debug\语法分析.sbr

     文件        228  2007-06-04 16:04  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\deduceTableLeft.txt

     文件        210  2007-06-05 15:25  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\deduceTableLength.txt

     文件        370  2007-06-04 15:52  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\goto.txt

     文件         68  2010-01-08 20:00  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\input.txt

     文件        346  2010-01-08 20:00  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\LEXoutput.txt

     文件        268  2010-01-08 19:43  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\output.txt

     文件       5649  2010-01-07 12:10  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\词法分析.h

     文件      11007  2010-01-07 22:02  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\语法分析.cpp

     文件     299520  2010-01-06 20:41  编译课设\分析表.doc

     文件      85561  2010-01-07 14:28  编译课设\封面.docx

     文件     256512  2010-01-10 20:25  编译课设\张良的报告.doc

     文件      17811  2010-01-04 10:18  编译课设\编译任务——张良.docx

     文件     184312  2009-06-21 21:52  编译课设\编译课程设计.doc

     目录          0  2010-01-22 10:09  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)\Debug

     目录          0  2010-01-22 10:08  编译课设\FOR循环语句的翻译程序设计(LR方法、输出四元式)

     目录          0  2010-01-22 10:09  编译课设

----------- ---------  ---------- -----  ----

             11834710                    28

............此处省略1个文件信息

评论

共有 条评论

相关资源