eRPC Generator (erpcgen)  Rev. 1.7.2
NXP Semiconductors
AstWalker.h
1 /*
2  * Copyright (c) 2014, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017 NXP
4  * All rights reserved.
5  *
6  *
7  * SPDX-License-Identifier: BSD-3-Clause
8  */
9 
10 #ifndef _EMBEDDED_RPC__ASTWALKER_H_
11 #define _EMBEDDED_RPC__ASTWALKER_H_
12 
13 #include "AstNode.h"
14 
16 // Classes
18 
19 namespace erpcgen {
20 
41 class AstWalker
42 {
43 public:
47  AstWalker() = default;
48 
56  AstWalker(std::string inputFile)
57  : m_fileName(inputFile)
58  {
59  }
60 
64  virtual ~AstWalker() = default;
65 
74  virtual void startWalk(AstNode *node);
75 
76 protected:
77  std::string m_fileName;
78  struct top_down
79  {
80  };
81  struct bottom_up
82  {
83  };
95  virtual void walk(AstNode *node);
96 
111  template <typename D>
112  void dispatch(AstNode *node);
113 
114  /*
115  * @name Top-down handlers
116  *
117  * @brief Top-down handlers types, which can be called.
118  */
120  virtual void handleRoot(AstNode *node, top_down){};
121  virtual AstNode *handleProgram(AstNode *node, top_down) { return nullptr; }
122  virtual AstNode *handleConst(AstNode *node, top_down) { return nullptr; }
123  virtual AstNode *handleChildren(AstNode *node, top_down) { return nullptr; }
124  virtual AstNode *handleType(AstNode *node, top_down) { return nullptr; }
125  virtual AstNode *handleEnum(AstNode *node, top_down) { return nullptr; }
126  virtual AstNode *handleEnumMember(AstNode *node, top_down) { return nullptr; }
127  virtual AstNode *handleStruct(AstNode *node, top_down) { return nullptr; }
128  virtual AstNode *handleStructMember(AstNode *node, top_down) { return nullptr; }
129  virtual AstNode *handleUnion(AstNode *node, top_down) { return nullptr; }
130  virtual AstNode *handleUnionCase(AstNode *node, top_down) { return nullptr; }
131  virtual AstNode *handleInterface(AstNode *node, top_down) { return nullptr; }
132  virtual AstNode *handleFunction(AstNode *node, top_down) { return nullptr; }
133  virtual AstNode *handleParam(AstNode *node, top_down) { return nullptr; }
134  virtual AstNode *handleExpr(AstNode *node, top_down) { return nullptr; }
135  virtual AstNode *handleBinaryOp(AstNode *node, top_down) { return nullptr; }
136  virtual AstNode *handleUnaryOp(AstNode *node, top_down) { return nullptr; }
137  virtual AstNode *handleAnnotation(AstNode *node, top_down) { return nullptr; }
139 
140  /*
141  * @name Bottom-up handlers
142  *
143  * @brief Bottom-up handlers types, which can be called.
144  */
146  virtual void handleRoot(AstNode *node, bottom_up){};
147  virtual AstNode *handleProgram(AstNode *node, bottom_up) { return nullptr; }
148  virtual AstNode *handleConst(AstNode *node, bottom_up) { return nullptr; }
149  virtual AstNode *handleChildren(AstNode *node, bottom_up) { return nullptr; }
150  virtual AstNode *handleType(AstNode *node, bottom_up) { return nullptr; }
151  virtual AstNode *handleEnum(AstNode *node, bottom_up) { return nullptr; }
152  virtual AstNode *handleEnumMember(AstNode *node, bottom_up) { return nullptr; }
153  virtual AstNode *handleStruct(AstNode *node, bottom_up) { return nullptr; }
154  virtual AstNode *handleStructMember(AstNode *node, bottom_up) { return nullptr; }
155  virtual AstNode *handleUnion(AstNode *node, bottom_up) { return nullptr; }
156  virtual AstNode *handleUnionCase(AstNode *node, bottom_up) { return nullptr; }
157  virtual AstNode *handleInterface(AstNode *node, bottom_up) { return nullptr; }
158  virtual AstNode *handleFunction(AstNode *node, bottom_up) { return nullptr; }
159  virtual AstNode *handleParam(AstNode *node, bottom_up) { return nullptr; }
160  virtual AstNode *handleExpr(AstNode *node, bottom_up) { return nullptr; }
161  virtual AstNode *handleBinaryOp(AstNode *node, bottom_up) { return nullptr; }
162  virtual AstNode *handleUnaryOp(AstNode *node, bottom_up) { return nullptr; }
163  virtual AstNode *handleAnnotation(AstNode *node, bottom_up) { return nullptr; }
165 };
166 
167 } // namespace erpcgen
168 
169 #endif // _EMBEDDED_RPC__ASTWALKER_H_
std::string m_fileName
Stores name of file from which AST was built.
Definition: AstWalker.h:77
AstWalker()=default
default constructor
virtual void walk(AstNode *node)
This function walk the AstNode depth-first and invoke handler methods.
Definition: AstWalker.cpp:29
virtual ~AstWalker()=default
destructor
Homogeneous AST node class.
Definition: AstNode.h:35
Performs a depth-first walk of an AST.
Definition: AstWalker.h:41
void dispatch(AstNode *node)
This function invoke the appropriate handler method for the node&#39;s token type..
Definition: AstWalker.cpp:49
Specifier type to select bottom-up handler using ADL.
Definition: AstWalker.h:81
AstWalker(std::string inputFile)
Constructor.
Definition: AstWalker.h:56
Definition: AstNode.h:25
virtual void startWalk(AstNode *node)
This function walk the AstNode depth-first and invoke handler methods.
Definition: AstWalker.cpp:20
Specifier type to select top-down handler using ADL.
Definition: AstWalker.h:78