WSF
WsfParseDefinitions.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11// ****************************************************************************
12// Updated by Infoscitex, a DCS Company.
13// ****************************************************************************
14
15#ifndef WSFPARSEDEFINITIONS_HPP
16#define WSFPARSEDEFINITIONS_HPP
17
18#include <list>
19#include <map>
20#include <memory>
21#include <string>
22#include <vector>
23
24#include "UtMemory.hpp"
26#include "WsfParseGrammar.hpp"
27#include "WsfParseRule.hpp"
29#include "WsfParseType.hpp"
34
38class WSF_PARSER_EXPORT WsfParseDefinitions
39{
40public:
47
48
49 void AddGrammar(const std::string& aFileName, std::istream& aInput);
50
51 bool Initialize();
52
53 WsfParseNamedRule* GetRoot() const { return mRootRulePtr; }
54 WsfParseNamedRule* GetGlobalRule() const { return mGlobalRules; }
56
58 const std::list<std::string>& GetDefinitionErrors() const { return mDefinitionErrors; }
59
60 std::string GetFullRuleName(WsfParseNamedRule& aRule);
61
62 WsfParseStruct* GetRootStruct() { return mRootStructPtr; }
63
64 std::string GetVersionString() { return mVersionString; }
66 {
67 bool operator()(const char* lhs, const char* rhs) const
68 {
69 for (;;)
70 {
71 if (*lhs < *rhs)
72 {
73 return true;
74 }
75 if (*rhs < *lhs)
76 {
77 return false;
78 }
79 if (*lhs == 0)
80 {
81 return false;
82 }
83 ++lhs;
84 ++rhs;
85 }
86 }
87 };
88
89 std::map<std::string, std::unique_ptr<WsfParseActionFunction>> mFunctions;
90
91 const WsfGrammar::M::Expr& GetInputGrammar() { return mInputGrammar; }
92
93private:
94 void InitializeFunctions();
95
96 void AddDefinitionError(const std::string& aError);
97
98 const char* MakeCharPtr(const std::string& aString);
99
100 WsfParseActionAddress ResolveActionAddress(WsfParseValueType*& aContainer,
101 const WsfParseTypePath& aPath,
102 bool aRelative = true);
103
104 WsfParseActionAddress ResolveActionAddress(WsfParseValueType*& aContainer, const std::string& aAddrText);
105
106 void ProcessRuleParams(const WsfGrammar::M::Expr& aRule,
107 WsfParseNamedRule& aParentRule,
108 WsfParseNamedRule* aRulePtr,
109 int aFirstParam);
110 void SetNoCase(WsfParseRule* aRulePtr);
111 WsfParseAction* ProcessAction(const WsfGrammar::M::Expr& aRule);
112 WsfParseActionPart* ProcessActionSub(const WsfGrammar::M::Expr& aRule);
113 bool ProcessRule(const WsfGrammar::M::Expr& aRule,
114 WsfParseNamedRule& aContextRule,
115 WsfParseRule* aParentRulePtr,
116 WsfParseRule*& aRVal);
117 void ResolveRule(WsfParseNamedRule& aParentRule, WsfParseRule*& aRulePtr, bool aAllowReplace);
118 void InitializeRule(WsfParseRule* aRulePtr, int aSequence);
119
120 void ResolveReference(WsfParseNamedRule& aParentRule, const std::string& aReferenceName, WsfParseRule*& aReferencedRulePtr);
121 void ResolveReference(WsfParseNamedRule& aParentRule,
122 WsfParseRuleReference& aReference,
123 WsfParseRule*& aReplacementRulePtr);
124
125 void ResolveBase(WsfParseStruct* aStructPtr, WsfParseNamedRule* aParentRulePtr);
126
127 void CheckActions(WsfParseRule* aRulePtr, WsfParseNamedRule* aContextPtr);
128 void CheckAction(WsfParseRule* aRulePtr, WsfParseValueType*& aContainer, WsfParseAction* aAction, size_t aPrevNodeIndex);
129 void CheckActionPart(WsfParseRule* aRulePtr,
130 WsfParseValueType*& aContainer,
131 WsfParseActionPart*& aActionPart,
132 size_t aPrevNodeIndex);
133 WsfParseValueType* GetTypeFromName(const std::string& aName);
134 WsfParseValueType* GetTypeFromName(WsfParseNamedRule& aContext, const std::string& aName);
135 WsfParseValueType* GetTypeFromPath(WsfParseNamedRule& aContext, WsfParseTypePath& aPath);
136
137 WsfParseTypeName ProcessType(WsfParseNamedRule& aParentRule, const WsfGrammar::M::Expr& aTypeRule);
138
139 WsfParseStringRule* mBasic_String;
140 WsfParseQuotedStringRule* mBasic_QuotableString;
141
142 WsfGrammar::M::Expr mInputGrammar;
143
144 WsfParseNamedRule* mRootRulePtr;
145 WsfParseNamedRule* mGlobalRules;
146 WsfParseStruct* mRootStructPtr;
147 std::list<std::string> mDefinitionErrors;
148
149 WsfParseValueType mSkipType;
150 // Store templated types such as List/XYZ etc...
151 std::map<std::string, WsfParseValueType*> mTemplatedTypes;
152
153 WsfParseRuleMemory mRuleMem;
154 std::set<std::string> mStrings;
155 std::string mVersionString;
156 UT_MEMORY_DEBUG_MARKER(cMDB_PARSE_DEFINITIONS);
157};
158#endif
@ cMDB_PARSE_DEFINITIONS
Definition WsfParseDebugMarkers.hpp:26
std::vector< UtStringRef > WsfParseTypePath
Definition WsfParseTypePath.hpp:21
Definition WsfParseGrammar.hpp:202
Definition WsfParseAction.hpp:33
Definition WsfParseAction.hpp:99
Definition WsfParseAction.hpp:329
WsfParseDefinitions(const WsfParseDefinitions &)=delete
WsfParseStruct * GetRootStruct()
Definition WsfParseDefinitions.hpp:62
WsfParseDefinitions()
Definition WsfParseDefinitions.cpp:34
WsfParseDefinitions(WsfParseDefinitions &&)=default
const std::list< std::string > & GetDefinitionErrors() const
Returns a list of errors encountered while processing the grammar definition.
Definition WsfParseDefinitions.hpp:58
std::map< std::string, std::unique_ptr< WsfParseActionFunction > > mFunctions
Definition WsfParseDefinitions.hpp:89
WsfParseType * mBasicTypes
Definition WsfParseDefinitions.hpp:55
WsfParseDefinitions & operator=(WsfParseDefinitions &&)=default
void AddGrammar(const std::string &aFileName, std::istream &aInput)
Definition WsfParseDefinitions.cpp:103
std::string GetVersionString()
Definition WsfParseDefinitions.hpp:64
WsfParseNamedRule * GetRoot() const
Definition WsfParseDefinitions.hpp:53
bool Initialize()
Definition WsfParseDefinitions.cpp:1406
WsfParseDefinitions & operator=(const WsfParseDefinitions &)=delete
const WsfGrammar::M::Expr & GetInputGrammar()
Definition WsfParseDefinitions.hpp:91
WsfParseNamedRule * GetGlobalRule() const
Definition WsfParseDefinitions.hpp:54
Definition WsfParseRule.hpp:350
Definition WsfParseBasicRules.hpp:102
Definition WsfParseRule.hpp:263
Definition WsfParseRule.hpp:431
Definition WsfParseRule.hpp:131
Definition WsfParseBasicRules.hpp:65
Definition WsfParseRule.hpp:527
Definition WsfParseType.hpp:139
Definition WsfParseType.hpp:40
Definition WsfParseRule.hpp:58
Definition WsfParseDefinitions.hpp:66
bool operator()(const char *lhs, const char *rhs) const
Definition WsfParseDefinitions.hpp:67
Copyrights Multiple, All Rights Reserved