blob: f505227b448b62a95dd1768d35f52d7e721a2333 [file] [log] [blame]
/*******************************************************************************
* You may amend and distribute as you like, but don't remove this header!
*
* EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
* See http://www.codeplex.com/EPPlus for details.
*
* Copyright (C) 2011 Jan Källman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
* If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
*
* All code and executables are provided "as is" with no warranty either express or implied.
* The author accepts no liability for any damage or loss of business that this product may cause.
*
* Code change notes:
*
* Author Change Date
* ******************************************************************************
* Mats Alm Added 2013-03-01 (Prior file history on https://github.com/swmal/ExcelFormulaParser)
*******************************************************************************/
using System.Collections.Frozen;
using System.Collections.Generic;
namespace EpplusFormulaParser;
internal static class TokenSeparatorProvider {
private static readonly FrozenDictionary<string, Token> _tokens = new Dictionary<string, Token> {
{ "+", new("+", TokenType.Operator) },
{ "-", new("-", TokenType.Operator) },
{ "*", new("*", TokenType.Operator) },
{ "/", new("/", TokenType.Operator) },
{ "^", new("^", TokenType.Operator) },
{ "&", new("&", TokenType.Operator) },
{ ">", new(">", TokenType.Operator) },
{ "<", new("<", TokenType.Operator) },
{ "=", new("=", TokenType.Operator) },
{ "<=", new("<=", TokenType.Operator) },
{ ">=", new(">=", TokenType.Operator) },
{ "<>", new("<>", TokenType.Operator) },
{ "(", new("(", TokenType.OpeningParenthesis) },
{ ")", new(")", TokenType.ClosingParenthesis) },
{ "{", new("{", TokenType.OpeningEnumerable) },
{ "}", new("}", TokenType.ClosingEnumerable) },
{ "'", new("'", TokenType.String) },
{ "\"", new("\"", TokenType.String) },
{ ",", new(",", TokenType.Comma) },
{ ";", new(";", TokenType.SemiColon) },
{ "[", new("[", TokenType.OpeningBracket) },
{ "]", new("]", TokenType.ClosingBracket) },
{ "%", new("%", TokenType.Percent) },
}.ToFrozenDictionary();
public static IDictionary<string, Token> Tokens => _tokens;
public static bool IsOperator(string item) =>
_tokens.TryGetValue(item, out var token) && token.TokenType == TokenType.Operator;
public static bool IsPossibleLastPartOfMultipleCharOperator(string part) => part is "=" or ">";
}