Comments, var access, start on objects
This commit is contained in:
@@ -60,6 +60,10 @@ Lexer::Lexer(std::string in) : file(std::move(in)) {
|
|||||||
if (!buf.empty()) content.push_back(buf);
|
if (!buf.empty()) content.push_back(buf);
|
||||||
if (c.value() != ' ') content.emplace_back(1, c.value());
|
if (c.value() != ' ') content.emplace_back(1, c.value());
|
||||||
buf.clear();
|
buf.clear();
|
||||||
|
} else if (c.value() == '/' && peek(0).has_value() && peek(0).value() == '/') {
|
||||||
|
while (c.has_value() && c.value() != '\n') {
|
||||||
|
c = consume();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
buf += c.value();
|
buf += c.value();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -240,16 +240,28 @@ void ASTCodeBlock::parseBlock() {
|
|||||||
std::cout << "Reached end of file while parsing function call" << std::endl;
|
std::cout << "Reached end of file while parsing function call" << std::endl;
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
while (getTokenType() != TokenType::CloseParen) {
|
consume(); // Consume the opening '('
|
||||||
|
int depth = 1;
|
||||||
|
while (depth > 0) {
|
||||||
std::optional<std::string> token = consume();
|
std::optional<std::string> token = consume();
|
||||||
if (token.has_value()) {
|
if (token.has_value()) {
|
||||||
args.push_back(token.value());
|
if (token.value() == "(") {
|
||||||
|
depth++;
|
||||||
|
args.push_back(token.value());
|
||||||
|
} else if (token.value() == ")") {
|
||||||
|
depth--;
|
||||||
|
if (depth == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
args.push_back(token.value());
|
||||||
|
} else {
|
||||||
|
args.push_back(token.value());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
std::cout << "Reached end of file while parsing function call" << std::endl;
|
std::cout << "Reached end of file while parsing function call" << std::endl;
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
consume();
|
|
||||||
nodes.emplace_back(std::make_shared<ASTFunctionCall>(fnNameStr, ASTCodeBlock(args).nodes));
|
nodes.emplace_back(std::make_shared<ASTFunctionCall>(fnNameStr, ASTCodeBlock(args).nodes));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,18 +84,6 @@ Executor::Executor(ASTCodeBlock in, bool isInitCall, std::map<std::string, ASTVa
|
|||||||
std::cout << "Expected value after = sign" << std::endl;
|
std::cout << "Expected value after = sign" << std::endl;
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
} else if (id == "==") {
|
|
||||||
|
|
||||||
} else if (id == "!=") {
|
|
||||||
|
|
||||||
} else if (id == ">") {
|
|
||||||
|
|
||||||
} else if (id == ">=") {
|
|
||||||
|
|
||||||
} else if (id == "<") {
|
|
||||||
|
|
||||||
} else if (id == "<=") {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
std::cout << "Expected function or operator after identifier" << std::endl;
|
std::cout << "Expected function or operator after identifier" << std::endl;
|
||||||
@@ -112,7 +100,12 @@ Executor::Executor(ASTCodeBlock in, bool isInitCall, std::map<std::string, ASTVa
|
|||||||
for (auto &callArgNode : callArgNodes) {
|
for (auto &callArgNode : callArgNodes) {
|
||||||
if (std::holds_alternative<std::shared_ptr<ASTValue>>(callArgNode)) {
|
if (std::holds_alternative<std::shared_ptr<ASTValue>>(callArgNode)) {
|
||||||
callArgs.push_back(*std::get<std::shared_ptr<ASTValue>>(callArgNode));
|
callArgs.push_back(*std::get<std::shared_ptr<ASTValue>>(callArgNode));
|
||||||
|
} else if (std::holds_alternative<std::shared_ptr<ASTIdentifier>>(callArgNode)) {
|
||||||
|
if (variables.find(std::get<std::shared_ptr<ASTIdentifier>>(callArgNode)->name) != variables.end()) {
|
||||||
|
callArgs.push_back(variables[std::get<std::shared_ptr<ASTIdentifier>>(callArgNode)->name]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (fnName == "import") {
|
if (fnName == "import") {
|
||||||
// work on importing modules later
|
// work on importing modules later
|
||||||
|
|||||||
@@ -13,6 +13,12 @@
|
|||||||
* context of execution. The class implements mechanisms for traversing AST nodes
|
* context of execution. The class implements mechanisms for traversing AST nodes
|
||||||
* and consuming or peeking at individual nodes.
|
* and consuming or peeking at individual nodes.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
class Object {
|
||||||
|
public:
|
||||||
|
std::vector<Object> children;
|
||||||
|
};
|
||||||
|
|
||||||
class Executor {
|
class Executor {
|
||||||
private:
|
private:
|
||||||
std::map<std::string, ASTFunction> functions;
|
std::map<std::string, ASTFunction> functions;
|
||||||
|
|||||||
Reference in New Issue
Block a user