public Token(TokenKind kind, string content, OpTokenInfo tokenInfo, int pos)
 {
     this.Kind      = kind;
     this.Content   = content;
     this.TokenInfo = tokenInfo;
     this.Pos       = pos;
 }
        private OpTokenInfo RegisterOpSymbol(string name, string character)
        {
            if (_builtinPatterns.Values.Any(p => p.Pattern.IsMatch(character) || Enum.TryParse <TokenKind>(name, out var kind)))
            {
                throw new ArgumentException();
            }

            if (!_opTokenInfoByCharacter.TryGetValue(character, out var info))
            {
                _opTokenInfoByCharacter.Add(character, info = new OpTokenInfo(name, character, new R.Regex("^" + R.Regex.Escape(character))));
            }

            return(info);
        }