Teuchos - Trilinos Tools Package  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Teuchos_MathExpr.hpp
1 // @HEADER
2 // *****************************************************************************
3 // Teuchos: Common Tools Package
4 //
5 // Copyright 2004 NTESS and the Teuchos contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef TEUCHOS_MATHEXPR_HPP
11 #define TEUCHOS_MATHEXPR_HPP
12 
13 #include <set>
14 
15 #include <Teuchos_Language.hpp>
16 #include <Teuchos_Reader.hpp>
17 
18 namespace Teuchos {
19 
20 namespace MathExpr {
21 
22 enum {
23  PROD_PROGRAM,
24  PROD_NO_STATEMENTS,
25  PROD_NEXT_STATEMENT,
26  PROD_ASSIGN,
27  PROD_NO_EXPR,
28  PROD_YES_EXPR,
29  PROD_EXPR,
30  PROD_TERNARY_DECAY,
31  PROD_OR_DECAY,
32  PROD_AND_DECAY,
33  PROD_ADD_SUB_DECAY,
34  PROD_MUL_DIV_DECAY,
35  PROD_NEG_DECAY,
36  PROD_POW_DECAY,
37  PROD_TERNARY,
38  PROD_OR,
39  PROD_AND,
40  PROD_GT,
41  PROD_LT,
42  PROD_GEQ,
43  PROD_LEQ,
44  PROD_EQ,
45  PROD_BOOL_PARENS,
46  PROD_ADD,
47  PROD_SUB,
48  PROD_MUL,
49  PROD_DIV,
50  PROD_POW,
51  PROD_CALL,
52  PROD_NO_ARGS,
53  PROD_SOME_ARGS,
54  PROD_FIRST_ARG,
55  PROD_NEXT_ARG,
56  PROD_NEG,
57  PROD_VAL_PARENS,
58  PROD_CONST,
59  PROD_VAR,
60  PROD_NO_SPACES,
61  PROD_SPACES
62 };
63 
64 enum { NPRODS = PROD_SPACES + 1 };
65 
66 enum {
67  TOK_SPACE,
68  TOK_NAME,
69  TOK_ADD,
70  TOK_SUB,
71  TOK_MUL,
72  TOK_DIV,
73  TOK_POW,
74  TOK_LPAREN,
75  TOK_RPAREN,
76  TOK_COMMA,
77  TOK_CHECK,
78  TOK_CHOOSE,
79  TOK_GT,
80  TOK_LT,
81  TOK_GEQ,
82  TOK_LEQ,
83  TOK_EQ,
84  TOK_AND,
85  TOK_OR,
86  TOK_CONST,
87  TOK_SEMICOLON,
88  TOK_ASSIGN
89 };
90 
91 enum { NTOKS = TOK_ASSIGN + 1 };
92 
93 Language make_language();
94 
95 LanguagePtr ask_language();
96 
97 ReaderTablesPtr ask_reader_tables();
98 
99 class SymbolSetReader : public Reader {
100  public:
101  SymbolSetReader();
102  virtual ~SymbolSetReader();
103  public:
104  std::set<std::string> variable_names;
105  std::set<std::string> function_names;
106  private:
107  virtual void at_shift(any& result, int token, std::string& text);
108  virtual void at_reduce(any& result, int prod, std::vector<any>& rhs);
109 };
110 
111 std::set<std::string> get_variables_used(std::string const& expr);
112 std::set<std::string> get_symbols_used(std::string const& expr);
113 
114 Reader* new_calc_reader();
115 
116 } // end namespace MathExpr
117 
118 } // end namespace Teuchos
119 
120 #endif
RCP< const ReaderTables > ReaderTablesPtr
an RCP to a const ReaderTables
RCP< const Language > LanguagePtr
an RCP to a const Language
Declares Teuchos::Language.
Declares Teuchos::Reader.