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)
);