コード例 #1
0
    public void InitSyntax()
    {
        var setLits      = new HashSet <string>();
        var lsLit_and_ID = new List <String>();

        foreach (ParseNode_Lit lit in EnumerateLitNodes())
        {
            if (setLits.Contains(lit.body))
            {
                continue;
            }

            setLits.Add(lit.body);
            lsLit_and_ID.Add(lit.body);
        }

        foreach (var id in EnumerateIdNodes())
        {
            var idName = id.Name;
            if (m_dicIdName2RuleOrToken.ContainsKey(idName))
            {
                continue;
            }

            m_dicIdName2RuleOrToken.Add(idName, m_dicNt2Rule.ContainsKey(idName) ? m_dicNt2Rule[idName] : null);
            lsLit_and_ID.Add(idName);
        }

        lsLit_and_ID.Sort();
        m_lsToken = lsLit_and_ID.ToArray();
        for (var i = 0; i < m_lsToken.Length; ++i)
        {
            var name = m_lsToken[i];
            if (!setLits.Contains(name) && m_dicIdName2RuleOrToken[name] == null)
            {
                m_dicIdName2RuleOrToken[name] = new ParseNode_Token(name, new TokenSet(i));

                if (name == "NAME")
                {
                    m_dicIdName2RuleOrToken[name].FirstSet.Add(m_dicIdName2RuleOrToken["IDENTIFIER"].FirstSet);
                }
            }
        }

        Init_PreCheckSet(this);
        Init_FollowSet(this, null);

        CheckLL1(this);
    }
コード例 #2
0
    public ParseNode_Token Clone()
    {
        var clone = new ParseNode_Token(name, FirstSet);

        return(clone);
    }