Resturcturing Some stuff

This commit is contained in:
Ryan Ward 2020-08-27 18:32:05 -04:00
parent 0f12ddcca3
commit e1e77dfce9
6 changed files with 282 additions and 254 deletions

View File

@ -118,6 +118,7 @@
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>

View File

@ -11,6 +11,9 @@ namespace dms {
return token{ tokentype::noop,codes::NOOP,"EOF",0 }; return token{ tokentype::noop,codes::NOOP,"EOF",0 };
return this->tokens[pos++]; return this->tokens[pos++];
} }
void tokenstream::prev() {
pos--;
}
std::vector<token> tokenstream::next(tokentype to, tokentype tc) { std::vector<token> tokenstream::next(tokentype to, tokentype tc) {
std::vector<token> tok; std::vector<token> tok;
size_t open = 0; size_t open = 0;
@ -70,6 +73,12 @@ namespace dms {
std::string passer::processBuffer(std::vector<uint8_t> buf) { std::string passer::processBuffer(std::vector<uint8_t> buf) {
return std::string(buf.begin(), buf.end()); return std::string(buf.begin(), buf.end());
} }
bool LineParser::isBlock() {
return isBlock(bt_block); // Default block type
}
bool LineParser::isBlock(blocktype bk_type) {
return current_chunk->type == bk_type;
}
void doCheck(passer* stream,std::vector<token>* t_vec, size_t line, bool &isNum, bool &hasDec, std::vector<uint8_t>* buffer) { void doCheck(passer* stream,std::vector<token>* t_vec, size_t line, bool &isNum, bool &hasDec, std::vector<uint8_t>* buffer) {
std::string str = stream->processBuffer(*buffer); std::string str = stream->processBuffer(*buffer);
if (utils::isNum(str) && isNum) { if (utils::isNum(str) && isNum) {
@ -166,24 +175,33 @@ namespace dms {
// //
return false; return false;
} }
std::map<std::string, chunk*> LineParser::tokenizer(dms_state* state,std::vector<token> &toks) { bool LineParser::createBlock(std::string bk_name, blocktype bk_type) {
std::map<std::string,chunk*> chunks; if (current_chunk != nullptr) {
chunk* current_chunk = nullptr; if (!chunks.count(current_chunk->name))
std::string chunk_name; chunks.insert_or_assign(current_chunk->name, current_chunk);
blocktype chunk_type = bt_block; else
std::stack<scope> scopes; {
size_t line=1; std::stringstream str;
tokenstream stream; str << "Block <" << current_chunk->name << "> already defined!";
stream.init(&toks); state->push_error(errors::error{ errors::block_already_defined,str.str(),true,line });
return false;
}
}
current_chunk = new chunk;
current_chunk->name = bk_name;
chunk_type = bk_type;
current_chunk->type = bk_type;
print("Created Block: ",bk_name," <",bk_type,">");
}
void LineParser::_Parse(tokenstream stream) {
token current = stream.next(); token current = stream.next();
std::vector<token> temp;
size_t tabs = 0;
while (stream.peek().type != tokens::eof) { while (stream.peek().type != tokens::eof) {
print(current); print(current);
if (current.type == tokens::tab) if (current.type == tokens::tab)
tabs++; tabs++;
if (current.type == tokens::flag) { if (current.type == tokens::flag) {
temp = stream.next(tokens::newline); temp = stream.next(tokens::newline);
stream.prev(); // Unconsume the newline piece
if (temp.size() != 2) { if (temp.size() != 2) {
std::cout << "Error"; std::cout << "Error";
} }
@ -191,7 +209,7 @@ namespace dms {
tokens::tokentype tok = temp[0].type; tokens::tokentype tok = temp[0].type;
if (code == codes::ENAB && tok == tokens::name) { if (code == codes::ENAB && tok == tokens::name) {
tolower(temp[0].name); tolower(temp[0].name);
state->enables.insert_or_assign(temp[0].name,true); state->enables.insert_or_assign(temp[0].name, true);
} }
else if (code == codes::ENTR && tok == tokens::name) { else if (code == codes::ENTR && tok == tokens::name) {
state->entry = temp[0].name; state->entry = temp[0].name;
@ -204,7 +222,7 @@ namespace dms {
state->version = std::stod(temp[0].name); state->version = std::stod(temp[0].name);
} }
else if (code == codes::USIN && tok == tokens::name) { else if (code == codes::USIN && tok == tokens::name) {
// TODO add usings, kinda useless since everything will be packed in. Perhaps extensions might work // TODO add usings, kinda useless atm since everything will be packed in. Perhaps extensions?
} }
else if (code == codes::LOAD && tok == tokens::string) { else if (code == codes::LOAD && tok == tokens::string) {
Parse(state, temp[0].name); // Load another file Parse(state, temp[0].name); // Load another file
@ -212,89 +230,53 @@ namespace dms {
else { else {
std::stringstream str; std::stringstream str;
str << "Expected <FLAG IDENTIFIER> " << " got: " << current << temp[0]; str << "Expected <FLAG IDENTIFIER> " << " got: " << current << temp[0];
state->push_error(errors::error{errors::badtoken,str.str(),true,line}); state->push_error(errors::error{ errors::badtoken,str.str(),true,line });
} }
} }
if (stream.match(tokens::newline,tokens::bracketo,tokens::name,tokens::bracketc)) { // Default block
if (stream.match(tokens::newline, tokens::bracketo, tokens::name, tokens::bracketc)) {
stream.next(); stream.next();
if (current_chunk != nullptr) { std::string name = stream.next().name;
if (!chunks.count(current_chunk->name)) createBlock(name,bt_block);
chunks.insert_or_assign(current_chunk->name, current_chunk);
else
{
std::stringstream str;
str << "Block <" << current_chunk->name << "> already defined!";
state->push_error(errors::error{ errors::block_already_defined,str.str(),true,line });
}
}
current_chunk = new chunk;
chunk_type = bt_block;
line = stream.next().line_num; // Consume line = stream.next().line_num; // Consume
current_chunk->name = stream.next().name;
stream.next(); // Consume stream.next(); // Consume
} }
// This handles a few block types since they all follow a similar format // This handles a few block types since they all follow a similar format
else if (stream.match(tokens::newline, tokens::bracketo, tokens::name,tokens::colon,tokens::name, tokens::bracketc)) { else if (stream.match(tokens::newline, tokens::bracketo, tokens::name, tokens::colon, tokens::name, tokens::bracketc)) {
stream.next(); stream.next();
stream.next(); stream.next();
if (current_chunk != nullptr) { std::string name = stream.next().name;
if (!chunks.count(current_chunk->name))
chunks.insert_or_assign(current_chunk->name, current_chunk);
else
{
std::stringstream str;
str << "Block <" << current_chunk->name << "> already defined!";
state->push_error(errors::error{ errors::block_already_defined,str.str(),true,line });
}
}
current_chunk = new chunk;
current_chunk->name = stream.next().name;
line = stream.next().line_num; line = stream.next().line_num;
std::string temp = stream.next().name; std::string temp = stream.next().name;
// Characters are a feature I want to have intergrated into the language // Characters are a feature I want to have intergrated into the language
if (temp == "char") { if (temp == "char") {
current_chunk->type = bt_character; createBlock(name, bt_character);
chunk_type = bt_character;
} }
// Enviroments are sortof like objects, they can be uses as an object. They are a cleaner way to build a hash map like object // Enviroments are sortof like objects, they can be uses as an object. They are a cleaner way to build a hash map like object
else if (temp == "env") { else if (temp == "env") {
current_chunk->type = bt_env; createBlock(name, bt_env);
chunk_type = bt_env;
} }
// Menus are what they say on the tin. They provide the framework for having menus within your game // Menus are what they say on the tin. They provide the framework for having menus within your game
else if (temp == "menu") { else if (temp == "menu") {
current_chunk->type = bt_menu; createBlock(name, bt_menu);
chunk_type = bt_menu;
} }
stream.next(); stream.next();
} }
else if (stream.match(tokens::newline,tokens::bracketo,tokens::name,tokens::colon,tokens::name,tokens::parao)) { // Function block type
else if (stream.match(tokens::newline, tokens::bracketo, tokens::name, tokens::colon, tokens::name, tokens::parao)) {
std::stringstream str; std::stringstream str;
stream.next(); stream.next();
stream.next(); stream.next();
if (current_chunk != nullptr) { std::string name = stream.next().name;
if (!chunks.count(current_chunk->name))
chunks.insert_or_assign(current_chunk->name, current_chunk);
else
{
std::stringstream str;
str << "Block <" << current_chunk->name << "> already defined!";
state->push_error(errors::error{ errors::block_already_defined,str.str(),true,line });
}
}
current_chunk = new chunk;
current_chunk->name = stream.next().name;
line = stream.next().line_num; // The color, not needed after the inital match, but we still need to consume it line = stream.next().line_num; // The color, not needed after the inital match, but we still need to consume it
std::string b = stream.next().name; std::string b = stream.next().name;
if (b == "function") { if (b == "function") {
current_chunk->type = bt_method; // We have a method let's set the block type to that, but we aren't done yet createBlock(name, bt_method); // We have a method let's set the block type to that, but we aren't done yet
// We need to set the params if any so the method can be supplied with arguments // We need to set the params if any so the method can be supplied with arguments
stream.next(); // parao stream.next(); // parao
std::vector<token> tokens = stream.next(tokens::parac); // Consume until we see parac std::vector<token> tokens = stream.next(tokens::parac); // Consume until we see parac
dms_args args; dms_args args;
for (size_t i = 0; i < tokens.size()-1; i++) {//The lase symbol is parac since that was the consume condition for (size_t i = 0; i < tokens.size() - 1; i++) {//The lase symbol is parac since that was the consume condition
if (tokens[i].type == tokens::name) { if (tokens[i].type == tokens::name) {
// We got a name which is refering to a variable so lets build one // We got a name which is refering to a variable so lets build one
value* v = new value{}; value* v = new value{};
@ -308,7 +290,7 @@ namespace dms {
else { else {
std::stringstream str; std::stringstream str;
str << "Unexpected symbol: " << tokens[i]; str << "Unexpected symbol: " << tokens[i];
state->push_error(errors::error{errors::badtoken,str.str(),true,line }); state->push_error(errors::error{ errors::badtoken,str.str(),true,line });
} }
} }
// If all went well the 'args' now has all of tha params for the method we will be working with // If all went well the 'args' now has all of tha params for the method we will be working with
@ -317,22 +299,22 @@ namespace dms {
} }
else { else {
str << "'function' keyword expected got " << b; str << "'function' keyword expected got " << b;
state->push_error(errors::error{errors::badtoken, str.str(),true,line }); state->push_error(errors::error{ errors::badtoken, str.str(),true,line });
} }
} }
// Control Handle all controls here // Control Handle all controls here
if (stream.match(tokens::tab,tokens::control)) { if (stream.match(tokens::tab, tokens::control)) {
stream.next(); // Standard consumption stream.next(); // Standard consumption
token control = stream.next(); token control = stream.next();
if (control.raw == codes::CHOI && stream.peek().type==tokens::string) { if (control.raw == codes::CHOI && stream.peek().type == tokens::string) {
// Let's parse choice blocks. // Let's parse choice blocks.
std::string prompt = stream.next().name; std::string prompt = stream.next().name;
print("Prompt: ",prompt); print("Prompt: ", prompt);
bool good = true; bool good = true;
size_t c = 0; size_t c = 0;
while (good) { while (good) {
// We need to template the matches // We need to template the matches
if (stream.match(tokens::tab,tokens::string,tokens::name,tokens::parao)) { if (stream.match(tokens::tab, tokens::string, tokens::name, tokens::parao)) {
stream.next(); stream.next();
std::string prompt = stream.next().name; std::string prompt = stream.next().name;
@ -341,7 +323,7 @@ namespace dms {
// We just grabbed the prompt, we don't yet know how many choices we have. So we have to figure out how we can // We just grabbed the prompt, we don't yet know how many choices we have. So we have to figure out how we can
// Process and write the bytecode for this. // Process and write the bytecode for this.
std::string func = stream.next().name; std::string func = stream.next().name;
print("Choice: <",c,"> ",prompt," Funcname: ",func); print("Choice: <", c, "> ", prompt, " Funcname: ", func);
std::vector funcstuff = stream.next(tokens::newline); std::vector funcstuff = stream.next(tokens::newline);
//We need to process the function data and finish creating //We need to process the function data and finish creating
@ -375,7 +357,7 @@ namespace dms {
std::string name = stream.next().name; std::string name = stream.next().name;
stream.next(); // That colon stream.next(); // That colon
std::string msg = stream.next().name; std::string msg = stream.next().name;
print("DISP := ", name , " says '",msg,"'"); print("DISP := ", name, " says '", msg, "'");
// We might have to consume a newline... Depends on what's next // We might have to consume a newline... Depends on what's next
if (stream.hasScope(tabs)) { if (stream.hasScope(tabs)) {
// If true we might have a group of displaying stuff. // If true we might have a group of displaying stuff.
@ -394,11 +376,15 @@ namespace dms {
wait(); wait();
}*/ }*/
if (current.type != tokens::tab) if (current.type != tokens::tab)
tabs=0; tabs = 0;
current = stream.next(); current = stream.next();
} }
chunks.insert_or_assign(current_chunk->name, current_chunk); chunks.insert_or_assign(current_chunk->name, current_chunk);
return chunks; }
void LineParser::tokenizer(dms_state* state,std::vector<token> &toks) {
stream.init(&toks);
this->state = state; // Grab the pointer to the state and store it within the parser object
_Parse(stream);
} }
void LineParser::tolower(std::string &s1) { void LineParser::tolower(std::string &s1) {
std::transform(s1.begin(), s1.end(), s1.begin(), std::tolower); std::transform(s1.begin(), s1.end(), s1.begin(), std::tolower);
@ -576,7 +562,6 @@ namespace dms {
if (data == ' ' && !isStr) { // tokens end with a space if (data == ' ' && !isStr) { // tokens end with a space
std::string str = stream.processBuffer(buffer); std::string str = stream.processBuffer(buffer);
tolower(str); tolower(str);
print("> ",str);
if (str == "enable") { if (str == "enable") {
t_vec.push_back(token{ tokens::flag,codes::ENAB,"",line }); t_vec.push_back(token{ tokens::flag,codes::ENAB,"",line });
} else if (str == "entry") { } else if (str == "entry") {
@ -658,8 +643,7 @@ namespace dms {
outputFile.close(); outputFile.close();
print("Running tokenizer"); print("Running tokenizer");
// Tokens build let's parse // Tokens build let's parse
std::map<std::string,chunk*> test = tokenizer(state, t_vec); tokenizer(state, t_vec);
print(test.size());
return state; return state;
} }
} }

View File

@ -22,6 +22,7 @@ namespace dms {
size_t pos = 0; size_t pos = 0;
void init(std::vector<tokens::token>* ptr); void init(std::vector<tokens::token>* ptr);
tokens::token next(); tokens::token next();
void prev();
std::vector<tokens::token> next(tokens::tokentype to,tokens::tokentype tc); std::vector<tokens::token> next(tokens::tokentype to,tokens::tokentype tc);
tokens::token peek(); tokens::token peek();
std::vector<tokens::token> next(tokens::tokentype tk); std::vector<tokens::token> next(tokens::tokentype tk);
@ -42,6 +43,18 @@ namespace dms {
class LineParser class LineParser
{ {
std::string fn; std::string fn;
std::map<std::string, chunk*> chunks;
chunk* current_chunk = nullptr;
std::string chunk_name;
blocktype chunk_type = bt_block;
std::stack<scope> scopes;
size_t line = 1;
tokenstream stream;
std::vector<tokens::token> temp;
size_t tabs = 0;
dms_state* state;
void _Parse(tokenstream stream);
public: public:
dms_state* Parse(); dms_state* Parse();
dms_state* Parse(std::string l); dms_state* Parse(std::string l);
@ -50,6 +63,7 @@ namespace dms {
LineParser(); LineParser();
//Matches tokens from the stream, if the tokens match it will return true and YOU should call next on the stream. This method does not change the current position //Matches tokens from the stream, if the tokens match it will return true and YOU should call next on the stream. This method does not change the current position
bool createBlock(std::string bk_name, blocktype bk_type);
bool buildLabel(chunk c, std::string label); bool buildLabel(chunk c, std::string label);
bool processFunc(tokenstream stream, chunk c); bool processFunc(tokenstream stream, chunk c);
@ -57,9 +71,13 @@ namespace dms {
bool processExpr(tokenstream stream, chunk c); bool processExpr(tokenstream stream, chunk c);
bool processLogic(tokenstream stream, chunk c); bool processLogic(tokenstream stream, chunk c);
//Utils
bool isBlock();
bool isBlock(blocktype bk_type);
void tolower(std::string &str); void tolower(std::string &str);
tokens::tokentype* expr(); tokens::tokentype* expr();
tokens::tokentype* variable(); tokens::tokentype* variable();
std::map<std::string, chunk*> tokenizer(dms_state* state, std::vector<tokens::token> &tok); void tokenizer(dms_state* state, std::vector<tokens::token> &tok);
}; };
} }

View File

@ -165,6 +165,7 @@ Line <35>NOOP newline
Line <36>NOOP bracketo Line <36>NOOP bracketo
Line <36>NOOP name main Line <36>NOOP name main
Line <36>NOOP bracketc Line <36>NOOP bracketc
Line <36>NOOP cbracketo
Line <36>NOOP newline Line <36>NOOP newline
Line <37>NOOP tab Line <37>NOOP tab
Line <37>NOOP name Ryan Line <37>NOOP name Ryan
@ -178,6 +179,7 @@ Line <38>NOOP newline
Line <39>NOOP tab Line <39>NOOP tab
Line <39>NOOP name Ryan Line <39>NOOP name Ryan
Line <39>NOOP colon Line <39>NOOP colon
Line <39>NOOP cbracketo
Line <39>NOOP newline Line <39>NOOP newline
Line <40>NOOP tab Line <40>NOOP tab
Line <40>NOOP tab Line <40>NOOP tab
@ -204,147 +206,103 @@ Line <44>NOOP tab
Line <44>NOOP tab Line <44>NOOP tab
Line <44>NOOP newline Line <44>NOOP newline
Line <45>NOOP tab Line <45>NOOP tab
Line <45>NOOP tab Line <45>NOOP cbracketc
Line <45>NOOP newline Line <45>NOOP newline
Line <46>NOOP tab Line <46>NOOP tab
Line <46>NOOP name tester
Line <46>NOOP equal
Line <46>NOOP string Hello
Line <46>NOOP newline Line <46>NOOP newline
Line <47>NOOP tab Line <47>NOOP tab
Line <47>NOOP name food Line <47>NOOP name tester
Line <47>NOOP equal Line <47>NOOP equal
Line <47>NOOP number 3 Line <47>NOOP string Hello
Line <47>NOOP newline Line <47>NOOP newline
Line <48>NOOP tab Line <48>NOOP tab
Line <48>NOOP name a Line <48>NOOP name food
Line <48>NOOP equal Line <48>NOOP equal
Line <48>NOOP name list Line <48>NOOP number 3
Line <48>NOOP bracketo
Line <48>NOOP number 1
Line <48>NOOP bracketc
Line <48>NOOP newline Line <48>NOOP newline
Line <49>NOOP tab
Line <49>NOOP name a
Line <49>NOOP equal
Line <49>NOOP name list
Line <49>NOOP bracketo
Line <49>NOOP number 1
Line <49>NOOP bracketc
Line <49>NOOP newline Line <49>NOOP newline
Line <50>NOOP tab Line <50>NOOP tab
Line <50>NOOP name hungry
Line <50>NOOP equal
Line <50>NOOP parao
Line <50>NOOP minus
Line <50>NOOP number 2
Line <50>NOOP plus
Line <50>NOOP number 4
Line <50>NOOP minus
Line <50>NOOP parao
Line <50>NOOP parao
Line <50>NOOP number 5
Line <50>NOOP multiply
Line <50>NOOP number 5
Line <50>NOOP parac
Line <50>NOOP divide
Line <50>NOOP name sqrt
Line <50>NOOP parao
Line <50>NOOP number 144
Line <50>NOOP plus
Line <50>NOOP number 5
Line <50>NOOP parac
Line <50>NOOP parac
Line <50>NOOP parac
Line <50>NOOP pow
Line <50>NOOP number 2
Line <50>NOOP multiply
Line <50>NOOP number 2
Line <50>NOOP plus
Line <50>NOOP number 2
Line <50>NOOP newline Line <50>NOOP newline
Line <51>NOOP tab Line <51>NOOP tab
Line <51>NOOP name list Line <51>IFFF control
Line <51>NOOP bracketo Line <51>NOOP name statment
Line <51>NOOP number 1 Line <51>NOOP cbracketo
Line <51>NOOP bracketc
Line <51>NOOP equal
Line <51>NOOP string Hello
Line <51>NOOP newline Line <51>NOOP newline
Line <52>NOOP tab Line <52>NOOP tab
Line <52>NOOP name var1 Line <52>NOOP tab
Line <52>NOOP number Line <52>NOOP string test
Line <52>NOOP equal
Line <52>NOOP name func
Line <52>NOOP parao
Line <52>NOOP number 1
Line <52>NOOP seperator
Line <52>NOOP string string
Line <52>NOOP seperator
Line <52>NOOP number 2
Line <52>NOOP plus
Line <52>NOOP number 5
Line <52>NOOP parac
Line <52>NOOP newline Line <52>NOOP newline
Line <53>NOOP tab Line <53>NOOP tab
Line <53>NOOP name a Line <53>NOOP cbracketc
Line <53>NOOP equal Line <53>ELIF control
Line <53>NOOP name 100 Line <53>NOOP name statement
Line <53>NOOP number Line <53>NOOP cbracketo
Line <53>NOOP plus
Line <53>NOOP name func
Line <53>NOOP parao
Line <53>NOOP number 1
Line <53>NOOP seperator
Line <53>NOOP string string
Line <53>NOOP seperator
Line <53>NOOP number 2
Line <53>NOOP plus
Line <53>NOOP number 5
Line <53>NOOP parac
Line <53>NOOP plus
Line <53>NOOP number 100
Line <53>NOOP newline Line <53>NOOP newline
Line <54>NOOP tab Line <54>NOOP tab
Line <54>NOOP name func Line <54>NOOP tab
Line <54>NOOP parao Line <54>NOOP string test
Line <54>NOOP number 1
Line <54>NOOP seperator
Line <54>NOOP string string
Line <54>NOOP seperator
Line <54>NOOP number 2
Line <54>NOOP plus
Line <54>NOOP number 5
Line <54>NOOP parac
Line <54>NOOP newline Line <54>NOOP newline
Line <55>NOOP tab Line <55>NOOP tab
Line <55>NOOP label label Line <55>NOOP tab
Line <55>NOOP cbracketc
Line <55>IFFF control
Line <55>NOOP name statement
Line <55>NOOP cbracketo
Line <55>NOOP newline Line <55>NOOP newline
Line <56>NOOP tab Line <56>NOOP tab
Line <56>NOOP tab
Line <56>NOOP tab
Line <56>NOOP string test
Line <56>NOOP newline Line <56>NOOP newline
Line <57>NOOP tab Line <57>NOOP tab
Line <57>NOOP tab
Line <57>NOOP tab
Line <57>NOOP string test
Line <57>NOOP newline Line <57>NOOP newline
Line <58>NOOP tab Line <58>NOOP tab
Line <58>NOOP tab
Line <58>NOOP tab
Line <58>IFFF control Line <58>IFFF control
Line <58>NOOP name statment Line <58>NOOP name statement
Line <58>NOOP name then Line <58>NOOP cbracketo
Line <58>NOOP newline Line <58>NOOP newline
Line <59>NOOP tab Line <59>NOOP tab
Line <59>NOOP tab Line <59>NOOP tab
Line <59>NOOP tab
Line <59>NOOP tab
Line <59>NOOP string test Line <59>NOOP string test
Line <59>NOOP newline Line <59>NOOP newline
Line <60>NOOP tab Line <60>NOOP tab
Line <60>ELIF control Line <60>NOOP tab
Line <60>NOOP name statement Line <60>NOOP tab
Line <60>NOOP name then Line <60>NOOP cbracketc
Line <60>ELSE control
Line <60>NOOP cbracketo
Line <60>NOOP newline Line <60>NOOP newline
Line <61>NOOP tab Line <61>NOOP tab
Line <61>NOOP tab Line <61>NOOP tab
Line <61>NOOP tab
Line <61>NOOP tab
Line <61>NOOP string test Line <61>NOOP string test
Line <61>NOOP newline Line <61>NOOP newline
Line <62>NOOP tab Line <62>NOOP tab
Line <62>NOOP tab Line <62>NOOP tab
Line <62>IFFF control Line <62>NOOP tab
Line <62>NOOP name statement Line <62>NOOP cbracketc
Line <62>NOOP name then
Line <62>NOOP newline Line <62>NOOP newline
Line <63>NOOP tab Line <63>NOOP tab
Line <63>NOOP tab Line <63>NOOP tab
Line <63>NOOP tab Line <63>NOOP cbracketc
Line <63>NOOP string test Line <63>ELIF control
Line <63>NOOP name statement
Line <63>NOOP cbracketo
Line <63>NOOP newline Line <63>NOOP newline
Line <64>NOOP tab Line <64>NOOP tab
Line <64>NOOP tab Line <64>NOOP tab
@ -353,150 +311,216 @@ Line <64>NOOP string test
Line <64>NOOP newline Line <64>NOOP newline
Line <65>NOOP tab Line <65>NOOP tab
Line <65>NOOP tab Line <65>NOOP tab
Line <65>NOOP tab Line <65>NOOP cbracketc
Line <65>IFFF control Line <65>ELSE control
Line <65>NOOP name statement Line <65>NOOP cbracketo
Line <65>NOOP name then
Line <65>NOOP newline Line <65>NOOP newline
Line <66>NOOP tab Line <66>NOOP tab
Line <66>NOOP tab Line <66>NOOP tab
Line <66>NOOP tab Line <66>NOOP tab
Line <66>NOOP tab
Line <66>NOOP string test Line <66>NOOP string test
Line <66>NOOP newline Line <66>NOOP newline
Line <67>NOOP tab Line <67>NOOP tab
Line <67>NOOP tab Line <67>NOOP tab
Line <67>NOOP tab Line <67>NOOP cbracketc
Line <67>NOOP name else
Line <67>NOOP newline Line <67>NOOP newline
Line <68>NOOP tab Line <68>NOOP tab
Line <68>NOOP tab
Line <68>NOOP tab
Line <68>NOOP tab
Line <68>NOOP string test
Line <68>NOOP newline Line <68>NOOP newline
Line <69>NOOP tab Line <69>NOOP tab
Line <69>NOOP tab Line <69>NOOP gotoo
Line <69>ELIF control Line <69>NOOP string somewhere
Line <69>NOOP name statement
Line <69>NOOP name then
Line <69>NOOP newline Line <69>NOOP newline
Line <70>NOOP tab Line <70>NOOP tab
Line <70>NOOP tab Line <70>NOOP jump
Line <70>NOOP tab Line <70>NOOP string overhere
Line <70>NOOP string test
Line <70>NOOP newline Line <70>NOOP newline
Line <71>NOOP tab
Line <71>NOOP name else
Line <71>NOOP newline Line <71>NOOP newline
Line <72>NOOP tab Line <72>NOOP tab
Line <72>NOOP tab Line <72>NOOP name hungry
Line <72>NOOP string test Line <72>NOOP equal
Line <72>NOOP parao
Line <72>NOOP minus
Line <72>NOOP number 2
Line <72>NOOP plus
Line <72>NOOP number 4
Line <72>NOOP minus
Line <72>NOOP parao
Line <72>NOOP parao
Line <72>NOOP number 5
Line <72>NOOP multiply
Line <72>NOOP number 5
Line <72>NOOP parac
Line <72>NOOP divide
Line <72>NOOP name sqrt
Line <72>NOOP parao
Line <72>NOOP number 144
Line <72>NOOP plus
Line <72>NOOP number 5
Line <72>NOOP parac
Line <72>NOOP parac
Line <72>NOOP parac
Line <72>NOOP pow
Line <72>NOOP number 2
Line <72>NOOP multiply
Line <72>NOOP number 2
Line <72>NOOP plus
Line <72>NOOP number 2
Line <72>NOOP newline Line <72>NOOP newline
Line <73>NOOP tab Line <73>NOOP tab
Line <73>NOOP name list
Line <73>NOOP bracketo
Line <73>NOOP number 1
Line <73>NOOP bracketc
Line <73>NOOP equal
Line <73>NOOP string Hello
Line <73>NOOP newline Line <73>NOOP newline
Line <74>NOOP tab Line <74>NOOP tab
Line <74>NOOP gotoo Line <74>NOOP name var1
Line <74>NOOP string somewhere Line <74>NOOP number
Line <74>NOOP equal
Line <74>NOOP name func
Line <74>NOOP parao
Line <74>NOOP number 1
Line <74>NOOP seperator
Line <74>NOOP string string
Line <74>NOOP seperator
Line <74>NOOP number 2
Line <74>NOOP plus
Line <74>NOOP number 5
Line <74>NOOP parac
Line <74>NOOP newline Line <74>NOOP newline
Line <75>NOOP tab Line <75>NOOP tab
Line <75>NOOP jump Line <75>NOOP name a
Line <75>NOOP string overhere Line <75>NOOP equal
Line <75>NOOP name 100
Line <75>NOOP number
Line <75>NOOP plus
Line <75>NOOP name func
Line <75>NOOP parao
Line <75>NOOP number 1
Line <75>NOOP seperator
Line <75>NOOP string string
Line <75>NOOP seperator
Line <75>NOOP number 2
Line <75>NOOP plus
Line <75>NOOP number 5
Line <75>NOOP parac
Line <75>NOOP plus
Line <75>NOOP number 100
Line <75>NOOP newline Line <75>NOOP newline
Line <76>NOOP tab Line <76>NOOP tab
Line <76>NOOP name func
Line <76>NOOP parao
Line <76>NOOP number 1
Line <76>NOOP seperator
Line <76>NOOP string string
Line <76>NOOP seperator
Line <76>NOOP number 2
Line <76>NOOP plus
Line <76>NOOP number 5
Line <76>NOOP parac
Line <76>NOOP newline Line <76>NOOP newline
Line <77>NOOP tab Line <77>NOOP tab
Line <77>CHOI control Line <77>NOOP label label
Line <77>NOOP string Pick one:
Line <77>NOOP cbracketo
Line <77>NOOP newline Line <77>NOOP newline
Line <78>NOOP tab Line <78>NOOP tab
Line <78>NOOP tab
Line <78>NOOP string first
Line <78>NOOP name func
Line <78>NOOP parao
Line <78>NOOP parac
Line <78>NOOP newline Line <78>NOOP newline
Line <79>NOOP tab Line <79>NOOP tab
Line <79>NOOP tab
Line <79>NOOP string second
Line <79>NOOP name func
Line <79>NOOP parao
Line <79>NOOP parac
Line <79>NOOP newline Line <79>NOOP newline
Line <80>NOOP tab Line <80>NOOP tab
Line <80>NOOP tab Line <80>CHOI control
Line <80>NOOP string third Line <80>NOOP string Pick one:
Line <80>NOOP name func Line <80>NOOP cbracketo
Line <80>NOOP parao
Line <80>NOOP parac
Line <80>NOOP newline Line <80>NOOP newline
Line <81>NOOP tab Line <81>NOOP tab
Line <81>NOOP tab Line <81>NOOP tab
Line <81>NOOP string forth Line <81>NOOP string first
Line <81>NOOP name func Line <81>NOOP name func
Line <81>NOOP parao Line <81>NOOP parao
Line <81>NOOP parac Line <81>NOOP parac
Line <81>NOOP newline Line <81>NOOP newline
Line <82>NOOP tab Line <82>NOOP tab
Line <82>NOOP tab Line <82>NOOP tab
Line <82>NOOP string fifth Line <82>NOOP string second
Line <82>NOOP gotoo Line <82>NOOP name func
Line <82>NOOP string here Line <82>NOOP parao
Line <82>NOOP parac
Line <82>NOOP newline Line <82>NOOP newline
Line <83>NOOP tab Line <83>NOOP tab
Line <83>NOOP tab Line <83>NOOP tab
Line <83>NOOP string sixth Line <83>NOOP string third
Line <83>NOOP gotoo Line <83>NOOP name func
Line <83>NOOP name name Line <83>NOOP parao
Line <83>NOOP parac
Line <83>NOOP newline Line <83>NOOP newline
Line <84>NOOP tab Line <84>NOOP tab
Line <84>NOOP tab Line <84>NOOP tab
Line <84>NOOP string sevinth Line <84>NOOP string forth
Line <84>NOOP jump Line <84>NOOP name func
Line <84>NOOP string there Line <84>NOOP parao
Line <84>NOOP parac
Line <84>NOOP newline Line <84>NOOP newline
Line <85>NOOP tab Line <85>NOOP tab
Line <85>NOOP tab Line <85>NOOP tab
Line <85>NOOP string eight Line <85>NOOP string fifth
Line <85>NOOP jump Line <85>NOOP gotoo
Line <85>NOOP name name Line <85>NOOP string here
Line <85>NOOP newline Line <85>NOOP newline
Line <86>NOOP tab Line <86>NOOP tab
Line <86>NOOP cbracketc Line <86>NOOP tab
Line <86>NOOP string sixth
Line <86>NOOP gotoo
Line <86>NOOP name name
Line <86>NOOP newline Line <86>NOOP newline
Line <87>NOOP tab
Line <87>NOOP tab
Line <87>NOOP string sevinth
Line <87>NOOP jump
Line <87>NOOP string there
Line <87>NOOP newline Line <87>NOOP newline
Line <88>NOOP tab
Line <88>NOOP tab
Line <88>NOOP string eight
Line <88>NOOP jump
Line <88>NOOP name name
Line <88>NOOP newline Line <88>NOOP newline
Line <89>NOOP bracketo Line <89>NOOP tab
Line <89>NOOP name Bob Line <89>NOOP cbracketc
Line <89>NOOP colon
Line <89>NOOP name char
Line <89>NOOP bracketc
Line <89>NOOP newline Line <89>NOOP newline
Line <90>NOOP tab Line <90>NOOP cbracketc
Line <90>NOOP name age
Line <90>NOOP equal
Line <90>NOOP number 24
Line <90>NOOP newline Line <90>NOOP newline
Line <91>NOOP tab
Line <91>NOOP name money
Line <91>NOOP equal
Line <91>NOOP number 100
Line <91>NOOP newline Line <91>NOOP newline
Line <92>NOOP newline Line <92>NOOP newline
Line <93>NOOP bracketo Line <93>NOOP bracketo
Line <93>NOOP name newblock Line <93>NOOP name Bob
Line <93>NOOP colon Line <93>NOOP colon
Line <93>NOOP name function Line <93>NOOP name char
Line <93>NOOP parao
Line <93>NOOP parac
Line <93>NOOP bracketc Line <93>NOOP bracketc
Line <93>NOOP newline Line <93>NOOP newline
Line <94>NOOP tab Line <94>NOOP tab
Line <94>NOOP string Test #2 Line <94>NOOP name age
Line <94>NOOP number Line <94>NOOP equal
Line <94>NOOP number 24
Line <94>NOOP newline Line <94>NOOP newline
Line <95>NOOP tab Line <95>NOOP tab
Line <95>NOOP string Does it parse this part properly? Line <95>NOOP name money
Line <95>NOOP equal
Line <95>NOOP number 100
Line <95>NOOP newline Line <95>NOOP newline
Line <97>NOOP eof Line <96>NOOP newline
Line <97>NOOP bracketo
Line <97>NOOP name newblock
Line <97>NOOP colon
Line <97>NOOP name function
Line <97>NOOP parao
Line <97>NOOP parac
Line <97>NOOP bracketc
Line <97>NOOP newline
Line <98>NOOP tab
Line <98>NOOP string Test #2
Line <98>NOOP number
Line <98>NOOP newline
Line <99>NOOP tab
Line <99>NOOP string Does it parse this part properly?
Line <99>NOOP newline
Line <101>NOOP eof

0
DMS/streams.cpp Normal file
View File

1
DMS/streams.h Normal file
View File

@ -0,0 +1 @@
#pragma once