Reworking language features

This commit is contained in:
Ryan Wardm 2020-08-21 21:56:58 -04:00
parent fbe246fa3f
commit 88485de617
16 changed files with 243 additions and 194 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -146,7 +146,23 @@ namespace dms {
}
return true;
}
// This function is broken
// Handling functions are important. This method is a helper function that allows you to
bool LineParser::processFunc(tokenstream stream, chunk c) {
//
return false;
}
bool processFunc(tokenstream stream, chunk c, std::string gotoo) {
return true;
}
bool LineParser::processExpr(tokenstream stream, chunk c) {
//
return false;
}
bool LineParser::processLogic(tokenstream stream, chunk c) {
//
return false;
}
std::map<std::string, chunk*> LineParser::tokenizer(dms_state* state,std::vector<token> &toks) {
std::map<std::string,chunk*> chunks;
chunk* current_chunk = nullptr;
@ -311,11 +327,17 @@ namespace dms {
bool good = true;
size_t c = 0;
while (good) {
if (match(stream, tokens::tab,tokens::string,tokens::name)) {
// We need to template the matches
if (match(stream, tokens::tab,tokens::string,tokens::name,tokens::parao)) {
stream.next();
std::string choice = stream.next().name;
std::string prompt = stream.next().name;
// To handle the function stuff we need to consume and process that data
// We have a method to process function data since this will be used a lot in many different places
// 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.
std::string func = stream.next().name;
print("Choice: <",c,"> ",choice," Funcname: ",func);
print("Choice: <",c,"> ",prompt," Funcname: ",func);
std::vector funcstuff = stream.next(tokens::newline);
//We need to process the function data and finish creating
@ -600,6 +622,9 @@ namespace dms {
else if (str == "goto") {
t_vec.push_back(token{ tokens::gotoo,codes::NOOP,"",line });
}
else if (str == "jump") {
t_vec.push_back(token{ tokens::jump,codes::NOOP,"",line });
}
else if (utils::isalphanum(str) && str.size()>0) {
t_vec.push_back(token{ tokens::name,codes::NOOP,stream.processBuffer(buffer),line });
}

View File

@ -46,6 +46,14 @@ namespace dms {
//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 match(tokenstream stream, tokens::tokentype t1=tokens::none, tokens::tokentype t2 = tokens::none, tokens::tokentype t3 = tokens::none, tokens::tokentype t4 = tokens::none, tokens::tokentype t5 = tokens::none, tokens::tokentype t6 = tokens::none, tokens::tokentype t7 = tokens::none, tokens::tokentype t8 = tokens::none, tokens::tokentype t9 = tokens::none, tokens::tokentype t10 = tokens::none, tokens::tokentype t11 = tokens::none, tokens::tokentype t12 = tokens::none);
bool match(tokenstream stream, tokens::tokentype* t1 = nullptr,tokens::tokentype* t2 = nullptr, tokens::tokentype* t3 = nullptr, tokens::tokentype* t4 = nullptr, tokens::tokentype* t5 = nullptr, tokens::tokentype* t6 = nullptr, tokens::tokentype* t7 = nullptr, tokens::tokentype* t8 = nullptr, tokens::tokentype* t9 = nullptr, tokens::tokentype* t10 = nullptr, tokens::tokentype* t11 = nullptr, tokens::tokentype* t12 = nullptr);
bool buildLabel(chunk c, std::string label);
bool processFunc(tokenstream stream, chunk c);
bool processFunc(tokenstream stream, chunk c, std::string gotoo);
bool processExpr(tokenstream stream, chunk c);
bool processLogic(tokenstream stream, chunk c);
void tolower(std::string &str);
tokens::tokentype* expr();
tokens::tokentype* variable();

View File

@ -297,31 +297,17 @@ Line <48>NOOP name func
Line <48>NOOP parao
Line <48>NOOP parac
Line <48>NOOP newline
Line <49>NOOP tab
Line <49>NOOP tab
Line <49>NOOP newline
Line <50>NOOP tab
Line <50>NOOP for
Line <50>NOOP name x
Line <50>NOOP equal
Line <50>NOOP number 1
Line <50>NOOP seperator
Line <50>NOOP number 10
Line <50>NOOP tab
Line <50>NOOP gotoo
Line <50>NOOP newline
Line <51>NOOP tab
Line <51>NOOP tab
Line <51>NOOP for
Line <51>NOOP name y
Line <51>NOOP equal
Line <51>NOOP number 1
Line <51>NOOP seperator
Line <51>NOOP number 10
Line <51>NOOP seperator
Line <51>NOOP number 1
Line <51>NOOP newline
Line <52>NOOP tab
Line <52>NOOP tab
Line <52>NOOP tab
Line <52>NOOP for
Line <52>NOOP name z
Line <52>NOOP name x
Line <52>NOOP equal
Line <52>NOOP number 1
Line <52>NOOP seperator
@ -329,204 +315,225 @@ Line <52>NOOP number 10
Line <52>NOOP newline
Line <53>NOOP tab
Line <53>NOOP tab
Line <53>NOOP tab
Line <53>NOOP tab
Line <53>NOOP string test
Line <53>NOOP for
Line <53>NOOP name y
Line <53>NOOP equal
Line <53>NOOP number 1
Line <53>NOOP seperator
Line <53>NOOP number 10
Line <53>NOOP seperator
Line <53>NOOP number 1
Line <53>NOOP newline
Line <54>NOOP tab
Line <54>NOOP tab
Line <54>NOOP tab
Line <54>NOOP tab
Line <54>NOOP string $x$ $y$ $z$
Line <54>NOOP for
Line <54>NOOP name z
Line <54>NOOP equal
Line <54>NOOP number 1
Line <54>NOOP seperator
Line <54>NOOP number 10
Line <54>NOOP newline
Line <55>NOOP tab
Line <55>NOOP name test
Line <55>NOOP equal
Line <55>NOOP true true
Line <55>NOOP tab
Line <55>NOOP tab
Line <55>NOOP tab
Line <55>NOOP string test
Line <55>NOOP newline
Line <56>NOOP tab
Line <56>NOOP name test2
Line <56>NOOP number
Line <56>NOOP equal
Line <56>NOOP false false
Line <56>NOOP tab
Line <56>NOOP tab
Line <56>NOOP tab
Line <56>NOOP string $x$ $y$ $z$
Line <56>NOOP newline
Line <57>NOOP tab
Line <57>NOOP name test
Line <57>NOOP equal
Line <57>NOOP true true
Line <57>NOOP newline
Line <58>NOOP tab
Line <58>NOOP name count
Line <58>NOOP name test2
Line <58>NOOP number
Line <58>NOOP equal
Line <58>NOOP number 0
Line <58>NOOP false false
Line <58>NOOP newline
Line <59>NOOP tab
Line <59>NOOP newline
Line <60>NOOP tab
Line <60>WHLE control
Line <60>NOOP name count
Line <60>NOOP not
Line <60>NOOP equal
Line <60>NOOP number 100
Line <60>NOOP number 0
Line <60>NOOP newline
Line <61>NOOP tab
Line <61>NOOP tab
Line <61>NOOP name count
Line <61>NOOP plus
Line <61>NOOP plus
Line <61>NOOP newline
Line <62>NOOP tab
Line <62>NOOP tab
Line <62>NOOP string Count = $count$
Line <62>WHLE control
Line <62>NOOP name count
Line <62>NOOP not
Line <62>NOOP equal
Line <62>NOOP number 100
Line <62>NOOP newline
Line <63>NOOP tab
Line <63>NOOP tab
Line <63>NOOP name count
Line <63>NOOP plus
Line <63>NOOP plus
Line <63>NOOP newline
Line <64>NOOP tab
Line <64>IFFF control
Line <64>NOOP parao
Line <64>NOOP name func
Line <64>NOOP parao
Line <64>NOOP number 123
Line <64>NOOP parac
Line <64>NOOP not
Line <64>NOOP equal
Line <64>NOOP name name
Line <64>NOOP bracketo
Line <64>NOOP number 1
Line <64>NOOP bracketc
Line <64>NOOP or
Line <64>NOOP true
Line <64>NOOP equal
Line <64>NOOP equal
Line <64>NOOP string Bob
Line <64>NOOP parac
Line <64>NOOP and
Line <64>NOOP name foodCount
Line <64>NOOP equal
Line <64>NOOP number 10.34
Line <64>NOOP tab
Line <64>NOOP string Count = $count$
Line <64>NOOP newline
Line <65>NOOP tab
Line <65>NOOP tab
Line <65>NOOP string test=true or test2=false!
Line <65>NOOP number
Line <65>NOOP newline
Line <66>NOOP tab
Line <66>NOOP tab
Line <66>NOOP string help me
Line <66>IFFF control
Line <66>NOOP parao
Line <66>NOOP name func
Line <66>NOOP parao
Line <66>NOOP number 123
Line <66>NOOP parac
Line <66>NOOP not
Line <66>NOOP equal
Line <66>NOOP name name
Line <66>NOOP bracketo
Line <66>NOOP number 1
Line <66>NOOP bracketc
Line <66>NOOP or
Line <66>NOOP true
Line <66>NOOP equal
Line <66>NOOP equal
Line <66>NOOP string Bob
Line <66>NOOP parac
Line <66>NOOP and
Line <66>NOOP name foodCount
Line <66>NOOP equal
Line <66>NOOP number 10.34
Line <66>NOOP newline
Line <67>NOOP tab
Line <67>NOOP tab
Line <67>IFFF control
Line <67>NOOP name cool
Line <67>NOOP equal
Line <67>NOOP equal
Line <67>NOOP true true
Line <67>NOOP string test=true or test2=false!
Line <67>NOOP number
Line <67>NOOP newline
Line <68>NOOP tab
Line <68>NOOP tab
Line <68>NOOP tab
Line <68>NOOP string We are here
Line <68>NOOP string help me
Line <68>NOOP newline
Line <69>NOOP tab
Line <69>NOOP tab
Line <69>NOOP tab
Line <69>NOOP string Nested if
Line <69>IFFF control
Line <69>NOOP name cool
Line <69>NOOP equal
Line <69>NOOP equal
Line <69>NOOP true true
Line <69>NOOP newline
Line <70>NOOP tab
Line <70>NOOP tab
Line <70>ELIF control
Line <70>NOOP name food
Line <70>NOOP equal
Line <70>NOOP number 21
Line <70>NOOP tab
Line <70>NOOP string We are here
Line <70>NOOP newline
Line <71>NOOP tab
Line <71>NOOP tab
Line <71>NOOP tab
Line <71>NOOP string This is getting weird
Line <71>NOOP string Nested if
Line <71>NOOP newline
Line <72>NOOP tab
Line <72>NOOP tab
Line <72>NOOP string Hi
Line <72>ELIF control
Line <72>NOOP name food
Line <72>NOOP equal
Line <72>NOOP number 21
Line <72>NOOP newline
Line <73>NOOP tab
Line <73>ELIF control
Line <73>NOOP parao
Line <73>NOOP name func2
Line <73>NOOP parao
Line <73>NOOP number 321
Line <73>NOOP parac
Line <73>NOOP not
Line <73>NOOP equal
Line <73>NOOP name name2
Line <73>NOOP bracketo
Line <73>NOOP number 1
Line <73>NOOP bracketc
Line <73>NOOP or
Line <73>NOOP true
Line <73>NOOP equal
Line <73>NOOP equal
Line <73>NOOP string Bob2
Line <73>NOOP number
Line <73>NOOP parac
Line <73>NOOP and
Line <73>NOOP name foodCount2
Line <73>NOOP number
Line <73>NOOP equal
Line <73>NOOP number 1.78
Line <73>NOOP tab
Line <73>NOOP tab
Line <73>NOOP string This is getting weird
Line <73>NOOP newline
Line <74>NOOP tab
Line <74>NOOP tab
Line <74>NOOP string This Block
Line <74>NOOP string Hi
Line <74>NOOP newline
Line <75>NOOP tab
Line <75>NOOP name else
Line <75>ELIF control
Line <75>NOOP parao
Line <75>NOOP name func2
Line <75>NOOP parao
Line <75>NOOP number 321
Line <75>NOOP parac
Line <75>NOOP not
Line <75>NOOP equal
Line <75>NOOP name name2
Line <75>NOOP bracketo
Line <75>NOOP number 1
Line <75>NOOP bracketc
Line <75>NOOP or
Line <75>NOOP true
Line <75>NOOP equal
Line <75>NOOP equal
Line <75>NOOP string Bob2
Line <75>NOOP number
Line <75>NOOP parac
Line <75>NOOP and
Line <75>NOOP name foodCount2
Line <75>NOOP number
Line <75>NOOP equal
Line <75>NOOP number 1.78
Line <75>NOOP newline
Line <76>NOOP tab
Line <76>NOOP tab
Line <76>NOOP string That Block
Line <76>NOOP string This Block
Line <76>NOOP newline
Line <77>NOOP tab
Line <77>NOOP string ah this is why no pop
Line <77>NOOP name else
Line <77>NOOP newline
Line <78>NOOP tab
Line <78>NOOP tab
Line <78>NOOP string That Block
Line <78>NOOP newline
Line <79>NOOP bracketo
Line <79>NOOP name Bob
Line <79>NOOP colon
Line <79>NOOP name char
Line <79>NOOP bracketc
Line <79>NOOP tab
Line <79>NOOP string ah this is why no pop
Line <79>NOOP newline
Line <80>NOOP tab
Line <80>NOOP name age
Line <80>NOOP equal
Line <80>NOOP number 24
Line <80>NOOP newline
Line <81>NOOP tab
Line <81>NOOP name money
Line <81>NOOP equal
Line <81>NOOP number 100
Line <81>NOOP bracketo
Line <81>NOOP name Bob
Line <81>NOOP colon
Line <81>NOOP name char
Line <81>NOOP bracketc
Line <81>NOOP newline
Line <82>NOOP tab
Line <82>NOOP name age
Line <82>NOOP equal
Line <82>NOOP number 24
Line <82>NOOP newline
Line <83>NOOP bracketo
Line <83>NOOP name test
Line <83>NOOP colon
Line <83>NOOP name env
Line <83>NOOP bracketc
Line <83>NOOP tab
Line <83>NOOP name money
Line <83>NOOP equal
Line <83>NOOP number 100
Line <83>NOOP newline
Line <84>NOOP tab
Line <84>NOOP string test
Line <84>NOOP newline
Line <85>NOOP bracketo
Line <85>NOOP name test
Line <85>NOOP colon
Line <85>NOOP name env
Line <85>NOOP bracketc
Line <85>NOOP newline
Line <86>NOOP bracketo
Line <86>NOOP name newblock
Line <86>NOOP colon
Line <86>NOOP name function
Line <86>NOOP parao
Line <86>NOOP parac
Line <86>NOOP bracketc
Line <86>NOOP tab
Line <86>NOOP string test
Line <86>NOOP newline
Line <87>NOOP tab
Line <87>NOOP string Test #2
Line <87>NOOP number
Line <87>NOOP newline
Line <88>NOOP tab
Line <88>NOOP string Does it parse this part properly?
Line <88>NOOP bracketo
Line <88>NOOP name newblock
Line <88>NOOP colon
Line <88>NOOP name function
Line <88>NOOP parao
Line <88>NOOP parac
Line <88>NOOP bracketc
Line <88>NOOP newline
Line <90>NOOP eof
Line <89>NOOP tab
Line <89>NOOP string Test #2
Line <89>NOOP number
Line <89>NOOP newline
Line <90>NOOP tab
Line <90>NOOP string Does it parse this part properly?
Line <90>NOOP newline
Line <92>NOOP eof

View File

@ -1,87 +1,94 @@
entry main
enable warnings
disable omniscient
//enable debugging
//loadfile "loadtest.dms"
version 1.2
using extendedDefine
[default:char]
// The default stats for all characters.
money = 0
[Ryan:char]
age = 21
money = 1000
// Inside a character block this syntax defines animation/image file for an emotion
calm: "./path/to/file"
excited: "./path/to/file"
[step:function(a,b,c)]
"Testing..."
d = (100 + b) / c
e = "somestring"
e = nil
f = true
g = false
return d
[inventory:env]
slot1 = ""
slot2 = ""
slot3 = ""
slot4 = ""
slot5 = ""
slot6 = ""
slot7 = ""
slot8 = ""
[main]
"This works!"
"What's up"
Ryan "Hello \"how\" are you doing?" // this is a comment
Bob "I'm good you?"
Ryan: "This works!"
DEBUG "What's up" // Debug lines are removed when debug mode is disabled
Ryan:
speed 100%
calm "Hello Bob, "
wait 0.455
excited "how are you doing?"
// Becomes: Hello Bob, how are you doing?
tester = "Hello"
food = 3
hi = {1,2,3}
list = {{1,2+food,hi[3]},true,tester,123,"This is a string!",false, {3,2,1}}
a = list[1]
hungry = (-2+4-((5*5)/sqrt(144+5)))^2*2+2
list[1] = "Hello"
var1,var2 = func(1,"string", 2+5)
var1 = func(1,"string", 2+5)
a = 100 + func(1,"string", 2+5) + 100
func(1,"string", 2+5)
::label::
//Hello im testing stuff
CHOICE "Pick one:"
if statment then
"test"
elseif statement then
"test"
if statement then
"test"
"test"
if statement then
"test"
else
"test"
elseif statement then
"test"
else
"test"
goto "somewhere"
jump "overhere"
CHOICE "Pick one:" {
"first" func()
"second" func()
"third" func()
"forth" func()
"fifth" goto "here"
"sixth" goto name
"sevinth" jump "there"
"eight" jump name
}
for x = 1,10
for y = 1,10,1
for z = 1,10
"test"
"$x$ $y$ $z$"
test = true
test2 = false
count = 0
while count != 100
count++;
"Count = $count$"
if (func(123)!=name[1] or true == "Bob") and foodCount >= 10.34
"test=true or test2=false!"
"help me"
if cool == true
"We are here"
"Nested if"
elseif food >= 21
"This is getting weird"
"Hi"
elseif (func2(321)!=name2[1] or true == "Bob2") and foodCount2 >= 1.78
"This Block"
else
"That Block"
"ah this is why no pop"
[Bob:char]
age = 24
money = 100
[test:env]
"test"
[newblock:function()]
"Test #2"

View File

@ -38,6 +38,7 @@ namespace dms::tokens {
eof,
ret,
gotoo,
jump,
nil
};//stream, t_vec, line, isNum, buffer
struct token {
@ -95,6 +96,7 @@ namespace dms::tokens {
"eof",
"ret",
"gotoo",
"jump",
"nil"
};
out << "Line <" << c.line_num << ">" << codes::list[c.raw] << " " << temp1[c.type] << " \t\t " << c.name;

Binary file not shown.

Binary file not shown.

Binary file not shown.