Plugged parser and lexer into main, updated Makefile.

This commit is contained in:
Stefano Sanfilippo 2014-11-28 19:01:34 +01:00
parent 5703593c9d
commit 66da783857
2 changed files with 21 additions and 49 deletions

View File

@ -1,11 +1,17 @@
default: compile cleanautogen
compile: compile:
bison --verbose -d Monicelli.ypp bison Monicelli.ypp
flex -P mc Monicelli.lpp flex Monicelli.lpp
g++ -Wall -Wno-deprecated-register -std=c++11 -DYYDEBUG=0 Monicelli.tab.cpp lex.mc.c Nodes.cpp main.cpp -o mcc g++ \
rm Monicelli.tab.* lex.* -Wall -Wno-deprecated-register -std=c++11 -DYYDEBUG=0 \
Parser.cpp lex.yy.cc Nodes.cpp main.cpp -o mcc
graph: graph:
bison --graph Monicelli.y bison --graph Monicelli.y
clean: cleanautogen:
rm -f Monicelli.dot Monicelli.tab.* lex.* Monicelli.output location.hh position.hh stack.hh rm -f Parser.?pp lex.* location.hh position.hh stack.hh
clean: cleanautogen
rm -f Monicelli.dot Monicelli.output

View File

@ -1,56 +1,22 @@
#include "Monicelli.tab.hpp" #include "Scanner.hpp"
#include "Parser.hpp"
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include <cstdlib>
#include <cstdio>
using namespace monicelli; using namespace monicelli;
int lineNumber = 1;
Program *program;
extern FILE *mcin;
void mcerror(const char *message) {
std::cerr << "At line " << lineNumber << ": " << message << std::endl;
std::exit(1);
}
void mcmeta(const char *text) {
while (*text != '\0' && *text == ' ') {
text += 1;
}
std::cerr << "META: " << text << std::endl;
}
int main(int argc, char **argv) { int main(int argc, char **argv) {
Program program;
Scanner scanner(std::cin);
Parser parser(scanner, program);
#if YYDEBUG #if YYDEBUG
mcdebug = 1; parser.set_debug_level(1);
#endif #endif
bool fromFile = argc > 1; parser.parse();
bool toFile = argc > 2; program.emit(std::cout);
program = new Program();
if (fromFile) {
mcin = fopen(argv[1], "r");
}
mcparse();
if (fromFile) {
fclose(mcin);
}
if (toFile) {
std::ofstream out(argv[2]);
program->emit(out);
out.close();
}
else {
program->emit(std::cout);
}
return 0; return 0;
} }