NouVeL/NVL/Parser.h
2022-08-18 12:17:43 -04:00

46 lines
952 B
C++

#pragma once
#include <vector>
#include <variant>
#include <string>
#include "Common.h"
namespace NVL::Parse {
enum class Type { Symbol, Number, String, Array, Subexpression };
class Object {
public:
Object() = delete;
Object(const Number& v);
Object(Type t, const std::string& v);
Object(Type t, const std::vector<Object>& v);
Object(Number&& v);
Object(Type t, std::string&& v);
Object(Type t, std::vector<Object>&& v);
Type type;
std::variant<
Number,
std::string,
std::vector<Object>
> value;
};
using Command = std::vector<Object>;
class Scene {
std::string name;
std::vector<Command> commands{};
public:
Scene(const std::string& name) : name(name) {}
void append(const Command& c) {
commands.push_back(c);
}
void append(Command&& c) {
commands.push_back(std::move(c));
}
const auto& get() const {
return commands;
}
};
std::vector<Scene> ParseFile(const std::string& path);
}