} } 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
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
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
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];
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库天津理工大学编译原理实验3:语义分析与中间代码生成(2)在线全文阅读。
相关推荐: