diff --git a/CMakeLists.txt b/CMakeLists.txt index f04ce0f291779095b2d996d26d9ef56d52ee500c..9223a9adbae2990565067439a3b46f74581cf9e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,10 +134,11 @@ add_subdirectory(src) include_directories(src) include_directories(src/algebra) +include_directories(src/language) include_directories(src/mesh) include_directories(src/output) -include_directories(src/utils) include_directories(src/scheme) +include_directories(src/utils) include_directories(src/experimental) @@ -219,5 +220,6 @@ target_link_libraries( pastis kokkos PastisUtils + PastisLanguage PastisMesh PastisExperimental) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fcc3e886e01edf90d0aca9447099d64056d2b91c..1a59893e1c6c3c463fc33fda5bd104b6e1d68861 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -7,6 +7,10 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}) add_subdirectory(utils) include_directories(utils) +# Pastis language +add_subdirectory(language) +include_directories(language) + # Pastis algebra #add_subdirectory(algebra) include_directories(algebra) diff --git a/src/language/CMakeLists.txt b/src/language/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..31b2bb1bc08fc66071514385b52fbddfb3e271ea --- /dev/null +++ b/src/language/CMakeLists.txt @@ -0,0 +1,13 @@ +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +# ------------------- Source files -------------------- + +add_library( + PastisLanguage + PastisParser.cpp) + +#include_directories(${PASTIS_SOURCE_DIR}/utils) + +# Additional dependencies +#add_dependencies(PastisMesh) diff --git a/src/language/PastisParser.cpp b/src/language/PastisParser.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7be5c4e949e7b305a21dd58e2566093fa559e9b3 --- /dev/null +++ b/src/language/PastisParser.cpp @@ -0,0 +1,44 @@ +#include <PastisParser.hpp> +#include <iostream> + +#define TAO_PEGTL_NAMESPACE language +#include <pegtl.hpp> +namespace language +{ +using namespace tao::language; + +// clang-format off +//struct prefix : string< 'H', 'e', 'l', 'l', 'o', ',', ' ' > {}; +struct prefix : TAO_PEGTL_STRING("Hello, ") {}; +struct name : plus< alpha > {}; +struct grammar + : must< prefix, name, star< sor< space, digit, string < '+' >, string < '-' >, string < '/' >, string < '*' > > >, one< '!' >, eof > +{ +}; +// clang-format on + +template< typename Rule > +struct action + : nothing< Rule > +{ +}; + +template<> +struct action< name > +{ + template< typename Input > + static void apply( const Input& in, std::string& v ) + { + v = in.string(); + } +}; +} + +void parser(const std::string& in_flow) { + std::string name; + language::string_input in( in_flow , std::string("source_name")); + language::parse< language::grammar, language::action >( in, name ); + + std::cout << in_flow << " -> "; + std::cout << "Good bye, " << name << "!" << std::endl; +} diff --git a/src/language/PastisParser.hpp b/src/language/PastisParser.hpp new file mode 100644 index 0000000000000000000000000000000000000000..0c68127d462b7846f5834baad5fdc7af629667f8 --- /dev/null +++ b/src/language/PastisParser.hpp @@ -0,0 +1,8 @@ +#ifndef PASTIS_PARSER_HPP +#define PASTIS_PARSER_HPP + +#include <string> + +void parser(const std::string& in_flow); + +#endif // PASTIS_PARSER_HPP diff --git a/src/main.cpp b/src/main.cpp index f277ce412860ccff5b88c256a2b552a8443e3e73..2bfab31ffd444ee3453c1b6fbc4909943f9e892d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -29,6 +29,7 @@ #include <MeshNodeBoundary.hpp> #include <GmshReader.hpp> +#include <PastisParser.hpp> #include <CLI/CLI.hpp> #include <limits> @@ -36,6 +37,11 @@ int main(int argc, char *argv[]) { + if (argc == 2) { + parser(argv[1]); + return 0; + } + long unsigned number = 10; std::string filename; {