code.cpp
来自「pl0文法编译器」· C++ 代码 · 共 101 行
CPP
101 行
#include "Code.h"
#include "IntpreSymset.h"
#include "Interpreter.h"
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
Code::Code(Interpreter *p)
{
idxOfStringStack=-1;
interpreter = p;
getCode();
}
void Code::list()
{
StringStack::iterator iterStr = stringStack.begin();
StringStack::iterator iterStr_end = stringStack.end();
if(iterStr==iterStr_end)
return;
for( ; iterStr != iterStr_end; iterStr++)
{
cout<<*iterStr<<endl;
}
cout<<"*code stack as fellow*"<<endl;
CodeStack::iterator iter = codeStack.begin();
CodeStack::iterator iter_end = codeStack.end();
int i = 0;
for( ; iter != iter_end; iter++)
{
switch((*iter).code)
{
case WRTI: cout<<i<<'\t'<<"WRT"; break;
case WRTR: cout<<i<<'\t'<<"WRTR"; break;
case WRTCH: cout<<i<<'\t'<<"WRTCH"; break;
case WRTSTR:cout<<i<<'\t'<<"WRTSTR";break;
case READI: cout<<i<<'\t'<<"READI"; break;
case READR: cout<<i<<'\t'<<"READR"; break;
case JMP: cout<<i<<'\t'<<"JMP"; break;
case JPC: cout<<i<<'\t'<<"JPC"; break;
case RTN: cout<<i<<'\t'<<"RTN"; break;
case ALOC: cout<<i<<'\t'<<"ALOC"; break;
case CALL: cout<<i<<'\t'<<"CALL"; break;
case STO: cout<<i<<'\t'<<"STO"; break;
case LODI: cout<<i<<'\t'<<"LODI"; break;
case LODR: cout<<i<<'\t'<<"LODR"; break;
case LODCH: cout<<i<<'\t'<<"LODCH"; break;
case LITI: cout<<i<<'\t'<<"LITI"; break;
case LITCH: cout<<i<<'\t'<<"LITCH"; break;
case LITR: cout<<i<<'\t'<<"LITR"; break;
case REV: cout<<i<<'\t'<<"REV"; break;
case ADD: cout<<i<<'\t'<<"ADD"; break;
case MIN: cout<<i<<'\t'<<"MIN"; break;
case TIM: cout<<i<<'\t'<<"TIM"; break;
case DIV: cout<<i<<'\t'<<"DIV"; break;
case DIVI: cout<<i<<'\t'<<"DIVi"; break;
case EQU: cout<<i<<'\t'<<"EQU"; break;
case NEQU: cout<<i<<'\t'<<"NEQU"; break;
case LES: cout<<i<<'\t'<<"LES"; break;
case LESEQ: cout<<i<<'\t'<<"LESEQ"; break;
case GRT: cout<<i<<'\t'<<"GRT"; break;
case GRTEQ: cout<<i<<'\t'<<"GRTEQ"; break;
default:break;
}
cout<<'\t'<<(*iter).l<<'\t'<<(*iter).a<<endl;
i++;
}
}
void Code::getCode()
{
string temp;
Instruction ins;
int val;
ifstream &instream = interpreter->inStream;
getline(instream,temp,'\n');
//if(temp.empty())
//{
// cout<<"the object file is empty"<<endl;
// exit(0);
//}
while(temp.empty()||temp.at(0)!='*' )
{
stringStack.push_back(temp);
getline(instream,temp,'\n');
}
while(!instream.eof())
{
instream>>val;
ins.code = (OPCode)val;
instream>>ins.l;
instream>>ins.a;
codeStack.push_back(ins);
getline(instream,temp,'\n');
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?