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