libcluon  0.0.148
MessageParser.cpp File Reference
#include "cluon/MessageParser.hpp"
#include "cluon/stringtoolbox.hpp"
#include "cpp-peglib/peglib.h"
#include <algorithm>
#include <functional>
#include <iostream>
#include <memory>
#include <regex>
#include <string>
#include <vector>

Namespaces

 cluon
 

Functions

else cluon::if ("CHARACTER"==f->name)
 
else if ("IDENTIFIER"==f->original_name)
 
 if (_fieldIdentifier.empty())
 
 if (0< STRING_TO_DATATYPE_MAP.count(_fieldDataType))
 
mf fieldDataTypeName (::stringtoolbox::trim(_fieldDataType))
 
mf fieldName (::stringtoolbox::trim(_fieldName))
 
mf fieldIdentifier ((!_fieldIdentifier.empty() ? static_cast< uint32_t >(std::stoi(::stringtoolbox::trim(_fieldIdentifier))) :fieldIdentifierCounter))
 
mf defaultInitializationValue (_fieldDefaultInitializerValue)
 
mm add (std::move(mf))
 
 if ("MESSAGES_SPECIFICATION"==ast.name)
 
peg::parser p (grammarMessageSpecificationLanguage)
 
p enable_ast ()
 
 catch (std::regex_error &)
 
 catch (std::bad_cast &)
 
 if (p.parse(inputWithoutComments.c_str(), ast))
 

Variables

 cluon::else
 
std::map< std::string, MetaMessage::MetaField::MetaFieldDataTypes > STRING_TO_DATATYPE_MAP
 
MetaMessage::MetaField mf
 
 else
 
return mm
 
p log
 
std::pair< std::vector< MetaMessage >, MessageParserErrorCodes > retVal {}
 
std::string inputWithoutComments {input}
 
 try
 
std::shared_ptr< peg::Ast > ast {}
 

Function Documentation

◆ add()

mm add ( std::move(mf )

◆ catch() [1/2]

catch ( std::regex_error &  )

◆ catch() [2/2]

catch ( std::bad_cast &  )

◆ defaultInitializationValue()

mf defaultInitializationValue ( _fieldDefaultInitializerValue  )

◆ enable_ast()

p enable_ast ( )

◆ fieldDataTypeName()

mf fieldDataTypeName ( ::stringtoolbox::trim(_fieldDataType)  )

◆ fieldIdentifier()

mf fieldIdentifier ( (!_fieldIdentifier.empty() ? static_cast< uint32_t >(std::stoi(::stringtoolbox::trim(_fieldIdentifier))) :fieldIdentifierCounter)  )

◆ fieldName()

mf fieldName ( ::stringtoolbox::trim(_fieldName)  )

◆ if() [1/5]

else if ( "IDENTIFIER"  = = f->original_name)

◆ if() [2/5]

if ( _fieldIdentifier.  empty())

◆ if() [3/5]

if ( )

◆ if() [4/5]

if ( "MESSAGES_SPECIFICATION"  = = ast.name)

References p().

◆ if() [5/5]

if ( p.  parseinputWithoutComments.c_str(), ast)

References retVal.

◆ p()

peg::parser p ( grammarMessageSpecificationLanguage  )

Referenced by if().

Variable Documentation

◆ ast

std::shared_ptr<peg::Ast> ast {}

◆ else

else
Initial value:
{
mf.fieldDataType(MetaMessage::MetaField::MESSAGE_T)
MetaMessage::MetaField mf
Definition: MessageParser.cpp:243

◆ inputWithoutComments

inputWithoutComments {input}

◆ log

p log
Initial value:
= [](size_t row, size_t col, const std::string &msg) {
std::cerr << "[cluon::MessageParser] Parsing error:" << row << ":" << col << ": " << msg << '\n';
}

◆ mf

MetaMessage::MetaField mf

Referenced by cluon::MetaMessage::add().

◆ mm

◆ retVal

◆ STRING_TO_DATATYPE_MAP

std::map<std::string, MetaMessage::MetaField::MetaFieldDataTypes> STRING_TO_DATATYPE_MAP
Initial value:
= {
{"bool", MetaMessage::MetaField::BOOL_T},
{"char", MetaMessage::MetaField::CHAR_T},
{"uint8", MetaMessage::MetaField::UINT8_T},
{"int8", MetaMessage::MetaField::INT8_T},
{"uint16", MetaMessage::MetaField::UINT16_T},
{"int16", MetaMessage::MetaField::INT16_T},
{"uint32", MetaMessage::MetaField::UINT32_T},
{"int32", MetaMessage::MetaField::INT32_T},
{"uint64", MetaMessage::MetaField::UINT64_T},
{"int64", MetaMessage::MetaField::INT64_T},
{"float", MetaMessage::MetaField::FLOAT_T},
{"double", MetaMessage::MetaField::DOUBLE_T},
{"string", MetaMessage::MetaField::STRING_T},
{"bytes", MetaMessage::MetaField::BYTES_T},
}

◆ try

try
Initial value:
{
const std::string MATCH_COMMENTS_REGEX = R"(/\*([\s\S]*?)\*/|//.*)"