New() public static method

public static New ( TokensGen tks, string str ) : ResWds
tks TokensGen
str string
return ResWds
示例#1
0
 internal bool AddNfaNode(NfaNode nfa)
 {
     if (!m_nfa.Add(nfa))
     {
         return(false);
     }
     if (nfa.m_sTerminal != "")
     {
         int    qi, n = 0;
         string tokClass = "";
         string p        = nfa.m_sTerminal;
         if (p[0] == '%')
         {                                                 // check for %Tokname special action
             for (n = 0, qi = 1; qi < p.Length; qi++, n++) // extract the class name
             {
                 if (p[qi] == ' ' || p[qi] == '\t' || p[qi] == '\n' || p[qi] == '{' || p[qi] == ':')
                 {
                     break;
                 }
             }
             tokClass = nfa.m_sTerminal.Substring(1, n);
         }
         // check for ResWds machinery // 4.7
         if (n > 0 && n + 1 < p.Length)
         {
             string st = nfa.m_sTerminal.Substring(n + 1).Trim();
             if (st.Length > 0)
             {
                 if (st.StartsWith("%except"))
                 {
                     m_reswds = nfa.m_state;
                     m_tks.m_tokens.reswds[nfa.m_state] = ResWds.New(m_tks, st.Substring(7));
                 }
             }
         }
         // special action is always last in the list
         if (tokClass == "")
         {                                        //nfa has an old action
             if (m_tokClass == ""                 // if both are old-style
                 ||                               // or we have a special action that is later
                 (m_actions.a_act) > nfa.m_state) // m_actions has at least one entry
             {
                 AddAction(nfa.m_state);
             }
             // else we have a higher-precedence special action so we do nothing
         }
         else if (m_actions == null || m_actions.a_act > nfa.m_state)
         {
             MakeLastAction(nfa.m_state);
             m_tokClass = tokClass;
         }                 // else we have a higher-precedence special action so we do nothing
     }
     return(true);
 }
示例#2
0
文件: Dfa.cs 项目: m33p/radegast
 internal bool AddNfaNode(NfaNode nfa)
 {
     if (!this.m_nfa.Add(nfa))
     {
         return(false);
     }
     if (nfa.m_sTerminal != "")
     {
         int    length    = 0;
         string str1      = "";
         string sTerminal = nfa.m_sTerminal;
         if (sTerminal[0] == '%')
         {
             length = 0;
             int index = 1;
             while (index < sTerminal.Length && (sTerminal[index] != ' ' && sTerminal[index] != '\t') && (sTerminal[index] != '\n' && sTerminal[index] != '{' && sTerminal[index] != ':'))
             {
                 ++index;
                 ++length;
             }
             str1 = nfa.m_sTerminal.Substring(1, length);
         }
         if (length > 0 && length + 1 < sTerminal.Length)
         {
             string str2 = nfa.m_sTerminal.Substring(length + 1).Trim();
             if (str2.Length > 0 && str2.StartsWith("%except"))
             {
                 this.m_reswds = nfa.m_state;
                 this.m_tks.m_tokens.reswds[(object)nfa.m_state] = (object)ResWds.New(this.m_tks, str2.Substring(7));
             }
         }
         if (str1 == "")
         {
             if (this.m_tokClass == "" || this.m_actions.a_act > nfa.m_state)
             {
                 this.AddAction(nfa.m_state);
             }
         }
         else if (this.m_actions == null || this.m_actions.a_act > nfa.m_state)
         {
             this.MakeLastAction(nfa.m_state);
             this.m_tokClass = str1;
         }
     }
     return(true);
 }