private void ParseToken(ParseElementCollection parent, string sToken, string pronunciation, string display, float reqConfidence)
        {
            int requiredConfidence = parent?._confidence ?? 0;

            sToken = Backend.NormalizeTokenWhiteSpace(sToken);
            if (string.IsNullOrEmpty(sToken))
            {
                return;
            }
            parent._confidence = 0;
            if (reqConfidence < 0f || reqConfidence.Equals(0.5f))
            {
                parent._confidence = 0;
            }
            else if ((double)reqConfidence < 0.5)
            {
                parent._confidence = -1;
            }
            else
            {
                parent._confidence = 1;
            }
            if (pronunciation != null || display != null)
            {
                string text  = EscapeToken(sToken);
                string text2 = (display == null) ? text : EscapeToken(display);
                if (pronunciation != null)
                {
                    OneOf oneOf = (pronunciation.IndexOf(';') >= 0) ? new OneOf(parent._rule, _backend) : null;
                    int   num   = 0;
                    int   num2  = 0;
                    while (num < pronunciation.Length)
                    {
                        num2 = pronunciation.IndexOf(';', num);
                        if (num2 == -1)
                        {
                            num2 = pronunciation.Length;
                        }
                        string text3 = pronunciation.Substring(num, num2 - num);
                        string text4 = null;
                        switch (_backend.Alphabet)
                        {
                        case AlphabetType.Sapi:
                            text4 = PhonemeConverter.ConvertPronToId(text3, _grammar.Backend.LangId);
                            break;

                        case AlphabetType.Ipa:
                            text4 = text3;
                            PhonemeConverter.ValidateUpsIds(text4);
                            break;

                        case AlphabetType.Ups:
                            text4 = PhonemeConverter.UpsConverter.ConvertPronToId(text3);
                            break;
                        }
                        string sWord = string.Format(CultureInfo.InvariantCulture, "/{0}/{1}/{2};", new object[3]
                        {
                            text2,
                            text,
                            text4
                        });
                        if (oneOf != null)
                        {
                            oneOf.AddArc(_backend.WordTransition(sWord, 1f, requiredConfidence));
                        }
                        else
                        {
                            parent.AddArc(_backend.WordTransition(sWord, 1f, requiredConfidence));
                        }
                        num = num2 + 1;
                    }
                    ((IElement)oneOf)?.PostParse((IElement)parent);
                }
                else
                {
                    string sWord2 = string.Format(CultureInfo.InvariantCulture, "/{0}/{1};", new object[2]
                    {
                        text2,
                        text
                    });
                    parent.AddArc(_backend.WordTransition(sWord2, 1f, requiredConfidence));
                }
            }
            else
            {
                parent.AddArc(_backend.WordTransition(sToken, 1f, requiredConfidence));
            }
        }