Skip to content
Snippets Groups Projects
Commit 82226c50 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add simple language infrastructure

simple tests of PEGTL based on the PEGTL reversed Hello, World! example
parent fe423707
No related branches found
No related tags found
1 merge request!12Feature/language
...@@ -134,10 +134,11 @@ add_subdirectory(src) ...@@ -134,10 +134,11 @@ add_subdirectory(src)
include_directories(src) include_directories(src)
include_directories(src/algebra) include_directories(src/algebra)
include_directories(src/language)
include_directories(src/mesh) include_directories(src/mesh)
include_directories(src/output) include_directories(src/output)
include_directories(src/utils)
include_directories(src/scheme) include_directories(src/scheme)
include_directories(src/utils)
include_directories(src/experimental) include_directories(src/experimental)
...@@ -219,5 +220,6 @@ target_link_libraries( ...@@ -219,5 +220,6 @@ target_link_libraries(
pastis pastis
kokkos kokkos
PastisUtils PastisUtils
PastisLanguage
PastisMesh PastisMesh
PastisExperimental) PastisExperimental)
...@@ -7,6 +7,10 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}) ...@@ -7,6 +7,10 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_subdirectory(utils) add_subdirectory(utils)
include_directories(utils) include_directories(utils)
# Pastis language
add_subdirectory(language)
include_directories(language)
# Pastis algebra # Pastis algebra
#add_subdirectory(algebra) #add_subdirectory(algebra)
include_directories(algebra) include_directories(algebra)
......
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)
#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;
}
#ifndef PASTIS_PARSER_HPP
#define PASTIS_PARSER_HPP
#include <string>
void parser(const std::string& in_flow);
#endif // PASTIS_PARSER_HPP
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <MeshNodeBoundary.hpp> #include <MeshNodeBoundary.hpp>
#include <GmshReader.hpp> #include <GmshReader.hpp>
#include <PastisParser.hpp>
#include <CLI/CLI.hpp> #include <CLI/CLI.hpp>
#include <limits> #include <limits>
...@@ -36,6 +37,11 @@ ...@@ -36,6 +37,11 @@
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
if (argc == 2) {
parser(argv[1]);
return 0;
}
long unsigned number = 10; long unsigned number = 10;
std::string filename; std::string filename;
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment