cymoca
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
lisp.h
Go to the documentation of this file.
1 #ifndef CYMOCA_AST_LISTENER_LISP_H_
2 #define CYMOCA_AST_LISTENER_LISP_H_
3 
4 #include "../ast.h"
5 #include "listener.h"
6 
7 namespace cymoca::ast::listener {
8 
9 class Lisp : public listener::Base {
10  protected:
11  std::stringstream m_ss{};
12 
13  public:
14  std::string get() {
15  std::string s = m_ss.str();
16  m_ss.str("");
17  return s;
18  }
19  void enter(condition::And *) override { m_ss << "and"; }
20  void enter(condition::Boolean *ctx) override {
21  m_ss << std::boolalpha << ctx->getValue();
22  }
23  void enter(condition::Equal *) override { m_ss << "=="; }
24  void enter(condition::GreaterThan *) override { m_ss << ">"; }
25  void enter(condition::GreaterThanOrEqual *) override { m_ss << ">="; }
26  void enter(condition::LessThan *) override { m_ss << "<"; }
27  void enter(condition::LessThanOrEqual *) override { m_ss << "<="; }
28  void enter(condition::Not *) override { m_ss << "not"; }
29  void enter(condition::NotEqual *) override { m_ss << "<>"; }
30  void enter(condition::Or *) override { m_ss << "or"; }
31  void enter(element::Component *ctx) override { m_ss << ctx->getName(); }
32  void enter(equation::If *) override { m_ss << "if"; }
33  void enter(equation::List *) override {}
34  void enter(equation::Simple *) override { m_ss << "="; }
35  void enter(equation::When *) override { m_ss << "when"; }
36  void enter(expression::Add *) override { m_ss << "+"; }
37  void enter(expression::Divide *) override { m_ss << "/"; }
38  void enter(expression::Function *ctx) override { m_ss << "func"; }
39  void enter(expression::List *) override {}
40  void enter(expression::Multiply *) override { m_ss << "*"; }
41  void enter(expression::Negative *) override { m_ss << "-"; }
42  void enter(expression::Number *ctx) override { m_ss << ctx->getValue(); }
43  void enter(expression::Reference *ctx) override { m_ss << ctx->getName(); }
44  void enter(model::Class *) override { m_ss << "class"; }
45  void enter(model::ElementDict *) override { m_ss << "elem dict"; }
46  void enter(statement::Block *) override {}
47  void enter(statement::If *) override { m_ss << "if"; }
48  void enter(statement::List *) override {}
49  void enter(statement::When *) override { m_ss << "when"; }
50  void enterEvery(INode *) override { m_ss << "("; }
51  void exitEvery(INode *) override { m_ss << ")"; }
52 };
53 
54 } // namespace cymoca::ast::listener
55 
56 #endif
void enter(expression::List *) override
Definition: lisp.h:39
void enter(condition::Equal *) override
Definition: lisp.h:23
const std::string & getName() const
Definition: element.h:24
std::stringstream m_ss
Definition: lisp.h:11
void enter(equation::If *) override
Definition: lisp.h:32
void enter(expression::Multiply *) override
Definition: lisp.h:40
void enter(expression::Negative *) override
Definition: lisp.h:41
void enter(element::Component *ctx) override
Definition: lisp.h:31
void enter(expression::Number *ctx) override
Definition: lisp.h:42
void enter(condition::GreaterThanOrEqual *) override
Definition: lisp.h:25
void enter(condition::LessThan *) override
Definition: lisp.h:26
void enter(equation::When *) override
Definition: lisp.h:35
void enter(expression::Divide *) override
Definition: lisp.h:37
void enter(condition::GreaterThan *) override
Definition: lisp.h:24
void enter(condition::Not *) override
Definition: lisp.h:28
void exitEvery(INode *) override
Definition: lisp.h:51
void enter(statement::If *) override
Definition: lisp.h:47
void enter(condition::Boolean *ctx) override
Definition: lisp.h:20
const std::string & getName() const
Definition: expression.h:20
void enter(statement::List *) override
Definition: lisp.h:48
void enter(condition::Or *) override
Definition: lisp.h:30
void enter(statement::When *) override
Definition: lisp.h:49
void enterEvery(INode *) override
Definition: lisp.h:50
void enter(expression::Add *) override
Definition: lisp.h:36
void enter(statement::Block *) override
Definition: lisp.h:46
void enter(equation::Simple *) override
Definition: lisp.h:34
void enter(equation::List *) override
Definition: lisp.h:33
void enter(condition::And *) override
Definition: lisp.h:19
void enter(model::ElementDict *) override
Definition: lisp.h:45
void enter(condition::LessThanOrEqual *) override
Definition: lisp.h:27
void enter(model::Class *) override
Definition: lisp.h:44
void enter(condition::NotEqual *) override
Definition: lisp.h:29
void enter(expression::Function *ctx) override
Definition: lisp.h:38
void enter(expression::Reference *ctx) override
Definition: lisp.h:43