资源简介

这是我们的课程设计,一个C语言小子集的四元式生成,改成汇编也很方便@!!

资源截图

代码片段和文件信息

#include“grammar.h“

void Grammar::showCode() {
int tabcnt = 0;
bool flag = false;
bool IF = false;
bool ELSE = false;
for (auto &word : Format) {
if (word == “未知符号错误“) break;
if (word == “if“) IF = true;
if (word == “}“) tabcnt--;
if (word == “{“ || word == “}“) {
cout << ‘\n‘;
}
if (word == “else“) cout << ‘\n‘ flag = true tabcnt-- ELSE = false;
int t = tabcnt;
if (flag || word == “{“ || word == “}“) {
while (t--) cout << “    “;
if (ELSE)cout << “    “ ELSE = false;
flag = false;
}
cout << word << ‘ ‘;
if (word == “else“) cout << ‘\n‘ flag = trueELSE =true;
if (word == “{“) tabcnt++;
if (word == “;“ || word ==“}“ || word==“{“) cout << ‘\n‘ flag = true;
if (IF && word == “)“) cout << ‘\n‘ flag = true IF = false tabcnt++;
}
}
void Grammar::debug() {
cout <<“ln:“<}
WORD Grammar::errors(string str) {
int row = nowWord.row;
int col = nowWord.col;
errorTable.push_back(WORD(str ERROR row col));
return WORD(str ERROR row col);
}
void Grammar::showFour() {
for (int i = 1; i < Fours.size(); i++) {
cout << “Line“ << i << “:\t(  “;
cout << Fours[i].op << “\t“ << Fours[i].sym1 << “\t“ << Fours[i].sym2 << “\t“ << Fours[i].res << “\t)“ << endl;
}
cout << Fours.size() << endl;
}
void Grammar::run() {
parseS();
if (errorTable.size() == 0) {
showFour();
} else {
cout << “共有“ << errorTable.size() << “个错误“ << ‘\n‘;
for (int i = 0; i < errorTable.size(); i++) {
WORD now = errorTable[i];
cout<<“错误编号“< cout << “行号:“ << now.row<<‘\t‘;
cout << “列号:“ << now.col<<‘\t‘;
cout << “错误信息:“ << now.word << endl;
}
}
}
void Grammar::makeFour(string a string b string c string d) {
Fours.push_back(Four(a b c d));
}
void Grammar::GetNewWord() {
nowWord = lex.getWord();
Format.push_back(nowWord.word);
}
// S->main A
void Grammar::parseS(){
GetNewWord();
if (nowWord.word != “main“) {
errors(“main匹配失败“);
}
else GetNewWord();
parseA();
}
// A->(){B}
void Grammar::parseA() {
if (nowWord.word != “(“) {
errors(“缺少(“);
}                                                                                                                                                                                                                 
else GetNewWord();
if (nowWord.word != “)“) {
errors(“缺少)“);
}
else GetNewWord();
if (nowWord.word != “{“) {
errors(“缺少{“);
}
else GetNewWord();
parseB();
if (nowWord.word != “}“) {
errors(“缺少}“);
}
else GetNewWord();
}
// 分析B <分程序>::=<变量说明部分>;<语句部分>
// B->Def ; F
// F 代表语句部分
// select = {int}
void Grammar::parseB() {
parseDef();
if (nowWord.word != “;“) errors(“缺少分号“);
else GetNewWord();
parseF();
}
// Def -> int LIST
void Grammar::parseDef() {
if (nowWord.word != “int“) {
errors(“缺少变量声明部分中的int“);
}
else GetNewWord();
parseList();

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

    ..A..H.     44544  2019-01-01 14:45  源代码\Compiler\.vs\Compiler\v15\.suo

     文件    6279168  2019-01-01 07:32  源代码\Compiler\.vs\Compiler\v15\Browse.VC.db

    ..A..H.        46  2019-01-01 14:26  源代码\Compiler\.vs\Compiler\v15\Browse.VC.opendb

     文件   39649280  2019-01-01 14:26  源代码\Compiler\.vs\Compiler\v15\ipch\AutoPCH\2ad8544a4b9f25e4\GRAMMAR.ipch

     文件   41680896  2019-01-01 14:26  源代码\Compiler\.vs\Compiler\v15\ipch\AutoPCH\481bd3790af93714\GRAMMAR.ipch

     文件   41680896  2019-01-01 14:26  源代码\Compiler\.vs\Compiler\v15\ipch\AutoPCH\58c149eb7fe50928\MAIN.ipch

     文件   41680896  2018-12-24 13:47  源代码\Compiler\.vs\Compiler\v15\ipch\AutoPCH\6f61545a27b7de65\LEXICAL.ipch

     文件   41680896  2018-11-22 13:41  源代码\Compiler\.vs\Compiler\v15\ipch\AutoPCH\f60ffc8bf46a8b17\GRAMMAR.ipch

     文件       6416  2018-11-22 13:53  源代码\Compiler\Compiler\Compiler.vcxproj

     文件       1573  2018-11-22 13:53  源代码\Compiler\Compiler\Compiler.vcxproj.filters

     文件        165  2018-11-16 13:40  源代码\Compiler\Compiler\Compiler.vcxproj.user

     文件         96  2019-01-01 14:45  源代码\Compiler\Compiler\Debug\Compiler.log

     文件       2186  2019-01-01 14:45  源代码\Compiler\Compiler\Debug\Compiler.tlog\CL.command.1.tlog

     文件      62404  2019-01-01 14:45  源代码\Compiler\Compiler\Debug\Compiler.tlog\CL.read.1.tlog

     文件       4850  2019-01-01 14:45  源代码\Compiler\Compiler\Debug\Compiler.tlog\CL.write.1.tlog

     文件        214  2019-01-01 14:45  源代码\Compiler\Compiler\Debug\Compiler.tlog\Compiler.lastbuildstate

     文件       1528  2019-01-01 14:45  源代码\Compiler\Compiler\Debug\Compiler.tlog\link.command.1.tlog

     文件       4042  2019-01-01 14:45  源代码\Compiler\Compiler\Debug\Compiler.tlog\link.read.1.tlog

     文件        750  2019-01-01 14:45  源代码\Compiler\Compiler\Debug\Compiler.tlog\link.write.1.tlog

     文件     892317  2019-01-01 04:00  源代码\Compiler\Compiler\Debug\grammar.obj

     文件     511484  2018-12-24 14:23  源代码\Compiler\Compiler\Debug\lexical.obj

     文件     551298  2019-01-01 14:45  源代码\Compiler\Compiler\Debug\Main.obj

     文件     281600  2019-01-01 14:45  源代码\Compiler\Compiler\Debug\vc141.idb

     文件     626688  2019-01-01 14:45  源代码\Compiler\Compiler\Debug\vc141.pdb

     文件        492  2018-12-23 17:26  源代码\Compiler\Compiler\defination.h

     文件       9466  2019-01-01 04:00  源代码\Compiler\Compiler\grammar.cpp

     文件       2614  2018-12-24 13:13  源代码\Compiler\Compiler\grammar.h

     文件        128  2019-01-01 03:59  源代码\Compiler\Compiler\input.txt

     文件       3439  2018-12-24 14:23  源代码\Compiler\Compiler\lexical.cpp

     文件       1217  2018-11-28 13:27  源代码\Compiler\Compiler\lexical.h

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

评论

共有 条评论