From 9aeb813b720bd71d147279ac8f6ac3d6735dead6 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Thu, 7 Nov 2019 18:10:08 +0100 Subject: [PATCH] Begin implementation of compound types --- src/language/ASTNodeDataTypeBuilder.cpp | 2 ++ src/language/PEGGrammar.hpp | 11 ++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/language/ASTNodeDataTypeBuilder.cpp b/src/language/ASTNodeDataTypeBuilder.cpp index 1857b73ab..05cbe4703 100644 --- a/src/language/ASTNodeDataTypeBuilder.cpp +++ b/src/language/ASTNodeDataTypeBuilder.cpp @@ -44,6 +44,8 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) data_type = ASTNodeDataType::double_t; } else if (type_node.is_type<language::string_type>()) { data_type = ASTNodeDataType::string_t; + } else if (type_node.is_type<language::type_expression>()) { + data_type = ASTNodeDataType::typename_t; } Assert(data_type != ASTNodeDataType::undefined_t); // LCOV_EXCL_LINE diff --git a/src/language/PEGGrammar.hpp b/src/language/PEGGrammar.hpp index bc2556cdc..f3d245ecd 100644 --- a/src/language/PEGGrammar.hpp +++ b/src/language/PEGGrammar.hpp @@ -71,6 +71,8 @@ struct basic_type : sor < B_set, R_set, Z_set, N_set, string_type > {}; struct TYPESPECIFIER : seq< basic_type, ignored> {}; +struct type_expression : list_must< TYPESPECIFIER, one< '*' > >{}; + struct and_kw : TAO_PEGTL_KEYWORD("and") {}; struct or_kw : TAO_PEGTL_KEYWORD("or") {}; @@ -205,18 +207,17 @@ struct logical_or : list_must< logical_and, or_op >{}; struct expression : logical_or {}; -struct affect_op : sor< eq_op, multiplyeq_op, divideeq_op, pluseq_op, minuseq_op > {}; +struct expression_list : seq< open_parent, expression, plus< if_must< COMMA, expression > >, close_parent >{}; -struct affectation : seq< NAME , if_must< affect_op, expression > >{}; +struct affect_op : sor< eq_op, multiplyeq_op, divideeq_op, pluseq_op, minuseq_op > {}; -struct declaration : if_must< TYPESPECIFIER, NAME, opt< if_must< seq< one< '=' >, ignored >, expression > > >{}; +struct affectation : seq< NAME , if_must< affect_op, sor< expression_list, expression > > >{}; -struct type_expression : list_must< TYPESPECIFIER, one< '*' > >{}; +struct declaration : if_must< type_expression, NAME, opt< if_must< seq< one< '=' >, ignored >, sor< expression_list, expression > > > >{}; struct type_mapping : seq< type_expression, RIGHT_ARROW, type_expression >{}; struct name_list : seq< open_parent, list_must< NAME, COMMA >, close_parent >{}; -struct expression_list : seq< open_parent, expression, plus< if_must< COMMA, expression > >, close_parent >{}; struct function_definition : seq< sor< name_list, NAME >, RIGHT_ARROW, sor< expression_list, expression > >{}; -- GitLab