@@ -0,0 +1 @@ | |||
/build |
@@ -0,0 +1,17 @@ | |||
SRCS = src/BBBParser.cc src/SourceFile.cc src/main.cc | |||
HDRS = src/BBBParser.h src/SourceFile.h | |||
BUILD = build | |||
OBJS = $(patsubst %,$(BUILD)/%.o,$(SRCS)) | |||
CFLAGS = -g | |||
$(BUILD)/%.cc.o: %.cc $(HDRS) | |||
@mkdir -p $(@D) | |||
$(CXX) $(CFLAGS) -c $< -o $@ | |||
$(BUILD)/bbbuild: $(OBJS) | |||
@mkdir -p $(@D) | |||
$(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS) | |||
.PHONY: clean | |||
clean: | |||
rm -rf $(BUILD) |
@@ -0,0 +1,47 @@ | |||
#include "SourceFile.h" | |||
#include <iostream> | |||
#include <fstream> | |||
#include <sstream> | |||
static bool startsWith(const std::string &a, const std::string &b, std::string &after) { | |||
if (a.size() < b.size()) | |||
return false; | |||
for (size_t i = 0; i < b.size(); ++i) { | |||
if (a[i] != b[i]) | |||
return false; | |||
} | |||
after = a.substr(b.size()); | |||
return true; | |||
} | |||
static void parseParts(std::vector<std::string> &vec, const std::string &str) { | |||
std::istringstream ss(str); | |||
std::string part; | |||
while (ss >> part) { | |||
vec.push_back(part); | |||
} | |||
} | |||
SourceFile::SourceFile(std::string dir, std::string name): | |||
dir_(std::move(dir)), name_(std::move(name)) { | |||
std::ifstream file(dir_ + "/" + name_); | |||
std::string line; | |||
std::string content; | |||
while (std::getline(file, line)) { | |||
if (line.size() < 4) continue; | |||
if (line[0] != '/' || line[1] != '/' || line[2] != '#') continue; | |||
if (startsWith(line, "//# pkgs:", content)) { | |||
parseParts(pkgs_, content); | |||
} else if (startsWith(line, "//# cflags:", content)) { | |||
parseParts(pkgs_, content); | |||
} else if (startsWith(line, "//# ldflags:", content)) { | |||
parseParts(pkgs_, content); | |||
} | |||
} | |||
} |
@@ -0,0 +1,16 @@ | |||
#pragma once | |||
#include <vector> | |||
#include <string> | |||
class SourceFile { | |||
public: | |||
SourceFile(std::string dir, std::string name); | |||
private: | |||
std::string dir_; | |||
std::string name_; | |||
std::vector<std::string> pkgs_; | |||
std::vector<std::string> cflags_; | |||
std::vector<std::string> ldflags_; | |||
}; |
@@ -0,0 +1,25 @@ | |||
#include <unistd.h> | |||
#include <fstream> | |||
#include "SourceFile.h" | |||
#include "BBBParser.h" | |||
void readDir(std::string dir, std::vector<SourceFile> sources) { | |||
} | |||
int main(int argc, char **argv) { | |||
std::ifstream file("test.bbb"); | |||
BBBParser parser(file, BBBParser::FLAG_NONE); | |||
BBBParser::Variables vars; | |||
parser.parse(vars); | |||
std::cout << "\nVariables found:\n"; | |||
for (auto &kv: vars) { | |||
std::cout << kv.first << ":\n"; | |||
for (auto &val: kv.second) { | |||
std::cout << "\t'" << val << "'\n"; | |||
} | |||
} | |||
} |
@@ -0,0 +1,3 @@ | |||
hello = "How are "you" my person" this\ is\ another "and a third" | |||
"this is a fourth" = no | |||
nope = ${hello} |