[poincare/parser] Use infinity symbol

- Use infinity symbol
- Parse inf, oo, infity
This commit is contained in:
Evann DREUMONT
2021-02-10 16:16:40 +01:00
parent a60d47bd2e
commit 763ce87d14
5 changed files with 15 additions and 3 deletions

View File

@@ -66,5 +66,6 @@ static constexpr CodePoint UCodePointNArySummation = 0x2211; // ∑
static constexpr CodePoint UCodePointSquareRoot = 0x221a; // √
static constexpr CodePoint UCodePointIntegral = 0x222b; // ∫
static constexpr CodePoint UCodePointMathematicalBoldSmallI = 0x1d422; // 𝐢
static constexpr CodePoint UCodePointInfinity = 0x221e; // ∞
#endif

View File

@@ -143,6 +143,7 @@ uint32_t CodePoints[] = {
0x2192, // → // RIGHTWARDS ARROW
0x2211, // ∑ // N-ARY SUMMATION
0x221a, // √ // SQUARE ROOT
0x221e, // ∞ // INFINITY
0x222b, // ∫ // INTEGRAL
0x2248, // ≈ // ALMOST EQUAL TO
0x2264, // ≤ // LESS-THAN OR EQUAL TO

View File

@@ -56,7 +56,7 @@ public:
static Infinity Builder(bool negative);
Expression setSign(ExpressionNode::Sign s);
static const char * Name() {
return "inf";
return "";
}
static int NameSize() {
return 4;

View File

@@ -44,6 +44,9 @@ bool Parser::IsSpecialIdentifierName(const char * name, size_t nameLength) {
return (
Token::CompareNonNullTerminatedName(name, nameLength, Symbol::k_ans) == 0 ||
Token::CompareNonNullTerminatedName(name, nameLength, Infinity::Name()) == 0 ||
Token::CompareNonNullTerminatedName(name, nameLength, "inf") == 0 ||
Token::CompareNonNullTerminatedName(name, nameLength, "infinity") == 0 ||
Token::CompareNonNullTerminatedName(name, nameLength, "oo") == 0 ||
Token::CompareNonNullTerminatedName(name, nameLength, Undefined::Name()) == 0 ||
Token::CompareNonNullTerminatedName(name, nameLength, Unreal::Name()) == 0 ||
Token::CompareNonNullTerminatedName(name, nameLength, "u") == 0 ||
@@ -426,7 +429,14 @@ void Parser::parseSequence(Expression & leftHandSide, const char * name, Token::
void Parser::parseSpecialIdentifier(Expression & leftHandSide) {
if (m_currentToken.compareTo(Symbol::k_ans) == 0) {
leftHandSide = Symbol::Ans();
} else if (m_currentToken.compareTo(Infinity::Name()) == 0) {
} else if (m_currentToken.compareTo(Infinity::Name()) == 0 ||
m_currentToken.compareTo("inf") == 0 ||
m_currentToken.compareTo("infinity") == 0 ||
m_currentToken.compareTo("oo") == 0
) {
leftHandSide = Infinity::Builder(false);
} else if (m_currentToken.compareTo("inf") == 0) {
leftHandSide = Infinity::Builder(false);
} else if (m_currentToken.compareTo(Undefined::Name()) == 0) {
leftHandSide = Undefined::Builder();

View File

@@ -224,7 +224,7 @@ Token Tokenizer::popToken() {
if (c == '}') {
return Token(Token::RightBrace);
}
if (c == UCodePointSquareRoot) {
if (c == UCodePointSquareRoot || c == UCodePointInfinity) {
Token result(Token::Identifier);
result.setString(start, UTF8Decoder::CharSizeOfCodePoint(c));
return result;