From 519aaba2323a069f980fea2b4ba319663cff12a3 Mon Sep 17 00:00:00 2001 From: Nathanne Isip Date: Sun, 8 Sep 2024 08:05:00 +0800 Subject: [PATCH] Updated main source file. --- src/Zhivo.cpp | 134 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 114 insertions(+), 20 deletions(-) diff --git a/src/Zhivo.cpp b/src/Zhivo.cpp index 8a06c6a..a392ebb 100644 --- a/src/Zhivo.cpp +++ b/src/Zhivo.cpp @@ -16,6 +16,8 @@ * along with Zhivo. If not, see . */ +#include +#include #include #include #include @@ -23,7 +25,6 @@ #include #include #include -#include #include @@ -33,6 +34,7 @@ #include #include +#include #include #include #include @@ -60,10 +62,18 @@ auto interpreter() -> int { // Create and visit a variable declaration auto varDecl1Tok = std::make_unique("x", "test.jnt", 1, 1, TokenType::IDENTIFIER); - auto varDecl = std::make_unique( - std::move(varDecl1Tok), + auto varDecl = std::make_unique( + std::move(std::make_unique( + "", + "test.jnt", + 1, + 1, + TokenType::IDENTIFIER + )), + std::move(std::make_unique(std::move(varDecl1Tok))), + "=", std::make_unique( - std::move(nil), + std::make_unique(*nil), 3.1416 ) ); @@ -77,7 +87,7 @@ auto interpreter() -> int { auto funcBodyStmts = std::vector>(); funcBodyStmts.push_back( std::make_unique( - std::move(nil), + std::make_unique(*nil), std::make_unique( std::move(std::make_unique("x", "test.jnt", 1, 1, TokenType::IDENTIFIER)) ) @@ -85,7 +95,7 @@ auto interpreter() -> int { ); auto funcBody = std::make_unique( - std::move(nil), + std::make_unique(*nil), std::move(funcBodyStmts) ); auto funcDecl = std::make_unique( @@ -96,8 +106,16 @@ auto interpreter() -> int { // Store the function declaration directly auto varDecl2Tok = std::make_unique("myFunc", "test.jnt", 1, 1, TokenType::IDENTIFIER); - auto myFuncDecl = std::make_unique( - std::move(varDecl2Tok), + auto myFuncDecl = std::make_unique( + std::move(std::make_unique( + "", + "test.jnt", + 1, + 1, + TokenType::IDENTIFIER + )), + std::move(std::make_unique(std::move(varDecl2Tok))), + "=", std::move(funcDecl) ); myFuncDecl->visit(globalSymbols); @@ -106,12 +124,12 @@ auto interpreter() -> int { // Create and visit a function call auto funcCallArgs = std::vector>{}; auto funcCall = std::make_unique( - std::move(nil), + std::make_unique(*nil), "myFunc", std::move(funcCallArgs) ); auto funcCallPrint = std::make_unique( - std::move(nil), + std::make_unique(*nil), std::move(funcCall) ); funcCallPrint->visit(globalSymbols); @@ -122,12 +140,12 @@ auto interpreter() -> int { // Create and visit a function call auto funcCallArgs = std::vector>{}; auto funcCall = std::make_unique( - std::move(nil), + std::make_unique(*nil), "myFunc", std::move(funcCallArgs) ); auto funcCallPrint = std::make_unique( - std::move(nil), + std::make_unique(*nil), std::move(funcCall) ); funcCallPrint->visit(globalSymbols); @@ -136,20 +154,36 @@ auto interpreter() -> int { // Create and visit string and number variables auto varDecl3Tok = std::make_unique("message", "test.jnt", 1, 1, TokenType::IDENTIFIER); - auto strDecl = std::make_unique( - std::move(varDecl3Tok), + auto strDecl = std::make_unique( + std::move(std::make_unique( + "", + "test.jnt", + 1, + 1, + TokenType::IDENTIFIER + )), + std::move(std::make_unique(std::move(varDecl3Tok))), + "=", std::make_unique( - std::move(nil), + std::make_unique(*nil), "The number is: " ) ); strDecl->visit(globalSymbols); auto varDecl4Tok = std::make_unique("number", "test.jnt", 1, 1, TokenType::IDENTIFIER); - auto numDecl = std::make_unique( - std::move(varDecl4Tok), + auto numDecl = std::make_unique( + std::move(std::make_unique( + "", + "test.jnt", + 1, + 1, + TokenType::IDENTIFIER + )), + std::move(std::make_unique(std::move(varDecl4Tok))), + "=", std::make_unique( - std::move(nil), + std::make_unique(*nil), 42 ) ); @@ -166,19 +200,79 @@ auto interpreter() -> int { ); auto addExpr = std::make_unique( - std::move(nil), + std::make_unique(*nil), std::move(strAccess), "+", std::move(numAccess) ); + std::vector> elements; + elements.push_back(std::make_unique(std::make_unique(*nil), std::move("Hello"))); + elements.push_back(std::make_unique(std::make_unique(*nil), std::move("Kamusta"))); + elements.push_back(std::make_unique(std::make_unique(*nil), std::move("Marhaba"))); + + auto arrayExpr = std::make_unique( + std::make_unique(*nil), + std::move(elements) + ); + + auto varDecl_2Tok = std::make_unique("array", "test.jnt", 1, 1, TokenType::IDENTIFIER); + auto varDecl2 = std::make_unique( + std::move(std::make_unique( + "", + "test.jnt", + 1, + 1, + TokenType::IDENTIFIER + )), + std::move(std::make_unique(std::move(varDecl_2Tok))), + "=", + std::move(arrayExpr) + ); + varDecl2->visit(globalSymbols); + + // Create ArrayAccessExpression for use in both assignments and printing + auto arrayAccessVar1 = std::make_unique( + std::make_unique(*nil), + std::make_unique( + std::make_unique("array", "test.jnt", 1, 1, TokenType::IDENTIFIER) + ), + std::make_unique(std::make_unique(*nil), 2.0) + ); + + auto arrayAccessVar2 = std::make_unique( + std::make_unique(*nil), + std::make_unique( + std::make_unique("array", "test.jnt", 1, 1, TokenType::IDENTIFIER) + ), + std::make_unique(std::make_unique(*nil), 2.0) + ); + + // Create BinaryExpression to set value of array at index 2 + auto setValExpr = std::make_unique( + std::make_unique(*nil), + std::move(arrayAccessVar1), + "=", + std::make_unique(std::make_unique(*nil), 3.14) + ); + setValExpr->visit(globalSymbols); + + // Print the array element at index 2 + auto varDecl_3Tok = std::make_unique("array", "test.jnt", 1, 1, TokenType::IDENTIFIER); + auto print1Stmt = std::make_unique( + std::make_unique(*nil), + std::move(std::make_unique(std::move(varDecl_3Tok))) + ); + print1Stmt->visit(globalSymbols); + std::cout << std::endl; + // Print the function declaration auto varAcces4Tok = std::make_unique("myFunc", "test.jnt", 1, 1, TokenType::IDENTIFIER); auto funcVarAccess = std::make_unique( std::move(varAcces4Tok) ); auto printStmt = std::make_unique( - std::move(nil), + std::make_unique(*nil), std::move(addExpr) );