Removed daggen
This commit is contained in:
parent
65df15633d
commit
2be0639308
3 changed files with 0 additions and 196 deletions
|
@ -1,11 +0,0 @@
|
|||
set(SRCS
|
||||
main.cpp
|
||||
print_tuples.h)
|
||||
|
||||
set(HEADERS
|
||||
)
|
||||
|
||||
source_group(daggen FILES ${SRCS} ${HEADERS})
|
||||
add_executable(dynarmic_daggen ${SRCS})
|
||||
target_link_libraries(dynarmic_daggen dynarmic_common)
|
||||
set_target_properties(dynarmic_daggen PROPERTIES LINKER_LANGUAGE CXX)
|
|
@ -1,137 +0,0 @@
|
|||
/* This file is part of the dynarmic project.
|
||||
* Copyright (c) 2016 MerryMage
|
||||
* This software may be used and distributed according to the terms of the GNU
|
||||
* General Public License version 2 or any later version.
|
||||
*/
|
||||
|
||||
#include <tuple>
|
||||
#include <vector>
|
||||
|
||||
#define BOOST_RESULT_OF_USE_DECLTYPE
|
||||
#define BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
#include <boost/fusion/adapted/std_tuple.hpp>
|
||||
#include <boost/fusion/include/std_tuple.hpp>
|
||||
#include <boost/spirit/include/qi.hpp>
|
||||
#include <boost/variant.hpp>
|
||||
|
||||
#include "common/common_types.h"
|
||||
#include "frontend_arm/ir/opcodes.h"
|
||||
|
||||
#include "print_tuples.h"
|
||||
|
||||
using Opcode = Dynarmic::IR::Opcode;
|
||||
|
||||
struct Inst;
|
||||
struct Ref;
|
||||
using Needle = boost::variant<Inst, Ref>;
|
||||
|
||||
struct Inst {
|
||||
Opcode opcode;
|
||||
std::vector<Needle> children;
|
||||
std::vector<Needle> parents;
|
||||
};
|
||||
|
||||
struct Ref {
|
||||
std::string name;
|
||||
};
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
std::string input{R"(
|
||||
tile TestTile
|
||||
in [ a (REGISTER), b (REGISTER) ]
|
||||
out [ o?(REGISTER) ]
|
||||
match
|
||||
o: ()
|
||||
endmatch
|
||||
code
|
||||
code
|
||||
endcode
|
||||
endtile
|
||||
)"};
|
||||
|
||||
std::string out_input = "out(REGISTER)";
|
||||
std::string ident_input = "out";
|
||||
|
||||
using Iterator = decltype(input.begin());
|
||||
namespace qi = boost::spirit::qi;
|
||||
namespace ascii = boost::spirit::ascii;
|
||||
using namespace qi::labels;
|
||||
|
||||
using TileIn = std::tuple<std::string, std::string>;
|
||||
using TileOut = std::tuple<std::string, bool, std::string>;
|
||||
using TileEntry = std::tuple<std::string, std::vector<TileIn>, std::vector<TileOut>, std::string, std::string>;
|
||||
|
||||
qi::rule<Iterator, std::string()> identifier;
|
||||
identifier %=
|
||||
qi::lexeme[ascii::alpha >> *ascii::alnum];
|
||||
|
||||
qi::rule<Iterator, std::string()> needle_name;
|
||||
needle_name %=
|
||||
qi::lexeme['$' >> *ascii::alnum];
|
||||
|
||||
qi::rule<Iterator, std::string()> until_closeparen;
|
||||
until_closeparen %=
|
||||
qi::lexeme[*(qi::char_ - ')')];
|
||||
|
||||
qi::rule<Iterator, TileIn(), ascii::space_type> in;
|
||||
in %=
|
||||
(identifier >> '(' >> until_closeparen >> ')');
|
||||
|
||||
qi::rule<Iterator, bool()> question_mark;
|
||||
question_mark =
|
||||
('?' >> qi::attr(true)) | qi::attr(false);
|
||||
|
||||
qi::rule<Iterator, TileOut(), ascii::space_type> out;
|
||||
out %=
|
||||
(identifier >> question_mark >> '(' >> until_closeparen >> ')');
|
||||
|
||||
qi::rule<Iterator, TileEntry(), ascii::space_type> entry;
|
||||
entry %= (
|
||||
qi::lit("tile") >> identifier >>
|
||||
qi::lit("in") >> '[' >> (in % ',') >> ']' >>
|
||||
qi::lit("out") >> '[' >> (out % ',') >> ']' >>
|
||||
qi::lit("match") >>
|
||||
qi::lexeme[*(qi::char_ - qi::lit("endmatch"))] >>
|
||||
qi::lit("endmatch") >>
|
||||
qi::lit("code") >>
|
||||
qi::lexeme[*(qi::char_ - qi::lit("endcode"))] >>
|
||||
qi::lit("endcode") >>
|
||||
qi::lit("endtile")
|
||||
);
|
||||
|
||||
auto first = input.begin(), last = input.end();
|
||||
TileEntry te;
|
||||
bool r = qi::phrase_parse(first, last, entry, ascii::space, te);
|
||||
|
||||
if (first != last || !r) {
|
||||
std::cout << "Fail!" << std::endl;
|
||||
std::cout << te << std::endl;
|
||||
} else {
|
||||
std::cout << te << std::endl;
|
||||
}
|
||||
|
||||
first = out_input.begin(), last = out_input.end();
|
||||
TileOut to;
|
||||
r = qi::phrase_parse(first, last, out, ascii::space, to);
|
||||
|
||||
if (first != last || !r) {
|
||||
std::cout << "Fail!" << std::endl;
|
||||
std::cout << to << std::endl;
|
||||
} else {
|
||||
std::cout << to << std::endl;
|
||||
}
|
||||
|
||||
|
||||
first = ident_input.begin(), last = ident_input.end();
|
||||
std::string test_ident;
|
||||
r = qi::phrase_parse(first, last, identifier, ascii::space, test_ident);
|
||||
|
||||
if (first != last || !r) {
|
||||
std::cout << "Fail!" << std::endl;
|
||||
std::cout << test_ident << std::endl;
|
||||
} else {
|
||||
std::cout << test_ident << std::endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
/* This file is part of the dynarmic project.
|
||||
* Copyright (c) 2016 MerryMage
|
||||
* This software may be used and distributed according to the terms of the GNU
|
||||
* General Public License version 2 or any later version.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
template<typename Type, unsigned N, unsigned Last>
|
||||
struct tuple_printer {
|
||||
|
||||
static void print(std::ostream& out, const Type& value) {
|
||||
out << std::get<N>(value) << ", ";
|
||||
tuple_printer<Type, N + 1, Last>::print(out, value);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Type, unsigned N>
|
||||
struct tuple_printer<Type, N, N> {
|
||||
|
||||
static void print(std::ostream& out, const Type& value) {
|
||||
out << std::get<N>(value);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
template<typename... Types>
|
||||
std::ostream& operator<<(std::ostream& out, const std::tuple<Types...>& value) {
|
||||
out << "(";
|
||||
tuple_printer<std::tuple<Types...>, 0, sizeof...(Types) - 1>::print(out, value);
|
||||
out << ")";
|
||||
return out;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
std::ostream& operator<<(std::ostream& out, const std::vector<T>& value) {
|
||||
out << "{";
|
||||
bool first = true;
|
||||
for (const auto& v : value) {
|
||||
if (!first) {
|
||||
out << ", ";
|
||||
} else {
|
||||
first = false;
|
||||
}
|
||||
out << v;
|
||||
}
|
||||
out << "}";
|
||||
return out;
|
||||
}
|
Loading…
Reference in a new issue