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); }
public ParseNode_Token Clone() { var clone = new ParseNode_Token(name, FirstSet); return(clone); }