added parsee and parsee group

This commit is contained in:
Rafał Grodziński
2025-07-17 16:00:12 +09:00
parent 1dc6010b9b
commit 502e4d2f6f
8 changed files with 146 additions and 107 deletions

View File

@@ -0,0 +1,36 @@
#include "Parsee.h"
Parsee Parsee::tokenParsee(TokenKind tokenKind, bool isRequired, bool shouldReturn) {
Parsee parsee;
parsee.kind = ParseeKind::TOKEN;
parsee.tokenKind = tokenKind;
parsee.isRequired = isRequired;
parsee.shouldReturn = shouldReturn;
return parsee;
}
Parsee Parsee::typeParsee() {
Parsee parsee;
parsee.kind = ParseeKind::TYPE;
return parsee;
}
Parsee::Parsee() { }
ParseeKind Parsee::getKind() {
return kind;
}
TokenKind Parsee::getTokenKind() {
return tokenKind;
}
bool Parsee::getIsRequired() {
return isRequired;
}
bool Parsee::getShouldReturn() {
return shouldReturn;
}

View File

@@ -0,0 +1,31 @@
#ifndef PARSEE_H
#define PARSEE_H
enum class TokenKind;
enum class ParseeKind {
TOKEN,
TYPE
};
class Parsee {
private:
ParseeKind kind;
TokenKind tokenKind;
bool isRequired;
bool shouldReturn;
Parsee();
public:
static Parsee tokenParsee(TokenKind tokenKind, bool isRequired, bool shouldReturn);
static Parsee typeParsee();
ParseeKind getKind();
TokenKind getTokenKind();
bool getIsRequired();
bool getShouldReturn();
};
#endif

View File

@@ -0,0 +1,24 @@
#include "ParseeGroup.h"
#include "Parsee.h"
ParseeGroup::ParseeGroup(bool isRequired, vector<Parsee> parsees, optional<ParseeGroup> repeatedGroup):
isRequired(isRequired), parsees(parsees) {
if (repeatedGroup) {
this->repeatedGroup = *repeatedGroup;
} else {
this->repeatedGroup = {};
}
}
bool ParseeGroup::getIsRequired() {
return isRequired;
}
vector<Parsee> ParseeGroup::getParsees() {
return parsees;
}
optional<reference_wrapper<ParseeGroup>> ParseeGroup::getRepeatedGroup() {
return repeatedGroup;
}

View File

@@ -0,0 +1,24 @@
#ifndef PARSEE_GROUP_H
#define PARSEE_GROUP_H
#include <vector>
#include <optional>
class Parsee;
using namespace std;
class ParseeGroup {
private:
bool isRequired;
vector<Parsee> parsees;
optional<reference_wrapper<ParseeGroup>> repeatedGroup;
public:
ParseeGroup(bool isRequired, vector<Parsee> parsees, optional<ParseeGroup> repeatedGroup);
bool getIsRequired();
vector<Parsee> getParsees();
optional<reference_wrapper<ParseeGroup>> getRepeatedGroup();
};
#endif