diff --git a/ion/src/shared/events.cpp b/ion/src/shared/events.cpp index 51cbb733d..a0e8246bd 100644 --- a/ion/src/shared/events.cpp +++ b/ion/src/shared/events.cpp @@ -30,7 +30,7 @@ static constexpr EventData s_dataForEvent[] = { TL(), TL(), U(), U(), U(), U(), TL(), TL(), TL(), TL(), TL(), TL(), T("exp()"), T("ln()"), T("log()"), T("i"), T(","), T("^"), - T("sin()"), T("cos()"), T("tan()"), T("p"), T("sqrt()"), T("^2"), + T("sin()"), T("cos()"), T("tan()"), T("Pi"), T("sqrt()"), T("^2"), T("7"), T("8"), T("9"), T("("), T(")"), U(), T("4"), T("5"), T("6"), T("*"), T("/"), U(), T("1"), T("2"), T("3"), T("+"), T("-"), U(), diff --git a/poincare/include/poincare/global_context.h b/poincare/include/poincare/global_context.h index c4285216b..43bb17950 100644 --- a/poincare/include/poincare/global_context.h +++ b/poincare/include/poincare/global_context.h @@ -20,6 +20,7 @@ public: private: int symbolIndex(const Symbol * symbol) const; Expression * m_expressions[k_maxNumberOfScalarExpressions]; + Float m_pi; }; #endif diff --git a/poincare/include/poincare/symbol.h b/poincare/include/poincare/symbol.h index 6b80bfdd3..694397b09 100644 --- a/poincare/include/poincare/symbol.h +++ b/poincare/include/poincare/symbol.h @@ -6,7 +6,8 @@ class Symbol : public LeafExpression { public: enum SpecialSymbols : char { - Ans = '^' + Ans = '^', + Pi = '*' }; Symbol(char name); ExpressionLayout * createLayout() const override; diff --git a/poincare/src/expression_lexer.l b/poincare/src/expression_lexer.l index 2586d2132..ad94d0ad4 100644 --- a/poincare/src/expression_lexer.l +++ b/poincare/src/expression_lexer.l @@ -81,7 +81,7 @@ E { return EE; } [A-Zxnt] { poincare_expression_yylval.character = yytext[0]; return SYMBOL; } abs { poincare_expression_yylval.expression = new AbsoluteValue(); return FUNCTION; } diff { poincare_expression_yylval.expression = new Derivative(); return FUNCTION; } -ans { poincare_expression_yylval.character = Symbol::Ans; return SYMBOL; } +ans { poincare_expression_yylval.character = Symbol::SpecialSymbols::Ans; return SYMBOL; } exp { poincare_expression_yylval.expression = new Exponential(); return FUNCTION; } sin { poincare_expression_yylval.expression = new Sine(); return FUNCTION; } cos { poincare_expression_yylval.expression = new Cosine(); return FUNCTION; } @@ -91,6 +91,7 @@ log { poincare_expression_yylval.expression = new Logarithm(); return FUNCTION; root { poincare_expression_yylval.expression = new NthRoot(); return FUNCTION; } sum { poincare_expression_yylval.expression = new Sum(); return FUNCTION; } product { poincare_expression_yylval.expression = new Product(); return FUNCTION; } +Pi { poincare_expression_yylval.character = Symbol::SpecialSymbols::Pi; return SYMBOL; } \+ { return PLUS; } \- { return MINUS; } \* { return MULTIPLY; } diff --git a/poincare/src/global_context.cpp b/poincare/src/global_context.cpp index 0eefdcac7..baee54faf 100644 --- a/poincare/src/global_context.cpp +++ b/poincare/src/global_context.cpp @@ -1,7 +1,9 @@ #include #include +#include -GlobalContext::GlobalContext() +GlobalContext::GlobalContext() : + m_pi(Float(M_PI)) { for (int i = 0; i < k_maxNumberOfScalarExpressions; i++) { m_expressions[i] = nullptr; @@ -19,6 +21,9 @@ int GlobalContext::symbolIndex(const Symbol * symbol) const { } const Expression * GlobalContext::expressionForSymbol(const Symbol * symbol) { + if (symbol->name() == Symbol::SpecialSymbols::Pi) { + return &m_pi; + } int index = symbolIndex(symbol); if (index < 0 || index >= k_maxNumberOfScalarExpressions) { return nullptr; diff --git a/poincare/src/symbol.cpp b/poincare/src/symbol.cpp index 33aefd4c1..720040800 100644 --- a/poincare/src/symbol.cpp +++ b/poincare/src/symbol.cpp @@ -35,6 +35,9 @@ ExpressionLayout * Symbol::createLayout() const { if (m_name == SpecialSymbols::Ans) { return new StringLayout("ans", 4); } + if (m_name == SpecialSymbols::Pi) { + return new StringLayout("Pi", 4); + } return new StringLayout(&m_name, 1); }