|
|
@ -19,40 +19,59 @@
|
|
|
|
#include "memdict.hpp"
|
|
|
|
#include "memdict.hpp"
|
|
|
|
#include "parser.hpp"
|
|
|
|
#include "parser.hpp"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <fstream>
|
|
|
|
#include <iostream>
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
|
|
// : variable create 0 , ;
|
|
|
|
static void parseLine(Parser&, State&, std::string_view);
|
|
|
|
// : create here constant ;
|
|
|
|
static void parseFile(Parser&, State&, std::istream&);
|
|
|
|
// : constant
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int main()
|
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
{
|
|
|
|
MemDict dict;
|
|
|
|
MemDict dict;
|
|
|
|
State state (dict);
|
|
|
|
State state (dict);
|
|
|
|
Parser parser;
|
|
|
|
Parser parser;
|
|
|
|
|
|
|
|
|
|
|
|
for (;;) {
|
|
|
|
std::vector args (argv + 1, argv + argc);
|
|
|
|
std::string line;
|
|
|
|
for (const auto& a : args) {
|
|
|
|
std::cout << state.size() << ' ' << state.compiling << "> ";
|
|
|
|
std::ifstream file (a);
|
|
|
|
std::getline(std::cin, line);
|
|
|
|
parseFile(parser, state, file);
|
|
|
|
|
|
|
|
|
|
|
|
ParseStatus r;
|
|
|
|
|
|
|
|
std::string_view lv (line);
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
|
|
|
r = parser.parse(state, lv);
|
|
|
|
|
|
|
|
} while (r == ParseStatus::Continue);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (r != ParseStatus::Finished)
|
|
|
|
|
|
|
|
std::cout << "r " << to_string(r) << std::endl;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//std::cout << state.size() << ' ' << state.compiling << "> ";
|
|
|
|
|
|
|
|
parseFile(parser, state, std::cin);
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int user_sys(State& state)
|
|
|
|
int user_sys(State& state)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
const auto value = state.pop();
|
|
|
|
switch (state.pop()) {
|
|
|
|
std::cout << value << std::endl;
|
|
|
|
case 0:
|
|
|
|
|
|
|
|
std::cout << state.pop() << std::endl;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void parseLine(Parser& parser, State& state, std::string_view line)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
ParseStatus r;
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
|
|
|
r = parser.parse(state, line);
|
|
|
|
|
|
|
|
} while (r == ParseStatus::Continue);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (r != ParseStatus::Finished)
|
|
|
|
|
|
|
|
std::cout << "r " << to_string(r) << std::endl;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void parseFile(Parser& parser, State& state, std::istream& file)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
while (file.good()) {
|
|
|
|
|
|
|
|
std::string line;
|
|
|
|
|
|
|
|
std::getline(file, line);
|
|
|
|
|
|
|
|
parseLine(parser, state, line);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|