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

2018-12-05 21:37

} } else if (sourceCode[i] >= '0'&& sourceCode[i] <= '9') { } else { } if (number != NULL) { } switch (sourceCode[i]) { case '+': } source.push_back(add); break; source.push_back(sub); break; source.push_back(mul); break; source.push_back(div); break; source.push_back(pow); break; source.push_back(lef); break; source.push_back(rig); break; std::cout << \ << sourceCode[i] << std::endl; return false; break; source.push_back(ide); identifier.push_back(number); number = 0; number = number * 10 + sourceCode[i] - 48; case '-': case '*': case '/': case '^': case '(': case ')': default: source.push_back(sha); return true; 第6页 共15页

} void Lexical::printSource() { } char Lexical::toChar(int a) { } void Lexical::setSourceCode(std::string source) { } sourceCode = source; switch (a) { case add: } return 0; return '+'; return '-'; return '*'; return '/'; return '^'; return 'i'; return '('; return ')'; return '#'; break; case sub: case mul: case div: case pow: case ide: case lef: case rig: case sha: default: for (int i = 0; i < source.size(); i++) { } std::cout << \; std::cout << toChar(source[i]); Syntax.h

第7页 共15页

#pragma once #include \namespace ccyg { std::vector symbolStack;// 定义符号栈 std::vector inputStack; // 定义输入栈 std::vector semStack; //定义语义栈 bool isSuccess; bool isInitNext; static const int preArray[9][9]; 第8页 共15页

class Syntax : public ccyg::Lexical { public: enum Relation //定义优先关系枚举 { }; enum Symbol { }; Syntax(std::string = 0); ~Syntax(); bool reduced();//定义归约方法 void movein();//定义移进方法 int findOperator();//查找最近运算符 char toChar(int); bool nextStep(); void initNext(); void printSymbol(); void printSemantic(); bool getSuccess(); E = 9, T = 10, F = 11, P = 12 equal = 0, less = 1, greater = 2, //错误 i_i = 3, i_left = 4, left_sharp = 5, right_i = 6, right_left = 7, sharp_right = 8 } }; Syntax.cpp #include \#include using namespace ccyg; const int Syntax::preArray[9][9] = { 2, 2, 1, 1, 1, 1, 1, 2, 2, { } Syntax::Syntax(std::string s) : Lexical(s) { } Syntax::~Syntax() { } void Syntax::movein() { symbolStack.push_back(source[0]); if (source[0] == ide) { } else 第9页 共15页

2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 5, 2, 2, 2, 2, 2, 6, 7, 2, 2, 1, 1, 1, 1, 1, 1, 1, 8, 0 }; long long poow(int a,int b) if (b == 1) { } else { } return poow(a,b-1) * a; return a; isSuccess = false; isInitNext = false; semStack.push_back(identifier[0]); std::vector::iterator iter = identifier.begin(); identifier.erase(iter); } { } std::vector::iterator it = source.begin(); source.erase(it); semStack.push_back(NULL); bool Syntax::reduced() { } case mul: { symbolStack[symbolStack.size() - 3] = T; symbolStack.pop_back(); 第10页 共15页

if (symbolStack[symbolStack.size() - 1] == ide) { } else { switch (symbolStack[symbolStack.size() - 2]) { case add: { } case sub: { symbolStack[symbolStack.size() - 3] = E; symbolStack.pop_back(); symbolStack.pop_back(); semStack[semStack.size() - 3] = semStack[semStack.size() - 3] semStack.pop_back(); semStack.pop_back(); break; symbolStack[symbolStack.size() - 3] = E; symbolStack.pop_back(); symbolStack.pop_back(); semStack[semStack.size() - 3] = semStack[semStack.size() - 3] semStack.pop_back(); semStack.pop_back(); break; symbolStack[symbolStack.size() - 1] = P; + semStack[semStack.size() - 1]; - semStack[semStack.size() - 1];


天津理工大学编译原理实验3:语义分析与中间代码生成(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:道路运输驾驶员继续1-9判断题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: