Esempio n. 1
0
        private ProcNameRaw ParseProcName()
        {
            ProcNameRaw procName = new ProcNameRaw();

            while (tape.HasCurrent)
            {
                if (tape.Current.IsKind(TokenKindSymbol.LBS))
                {
                    var bck = ParseProcBracket();
                    if (bck != null)
                    {
                        procName.NameTerms.Add(bck);
                    }
                }
                else if (tape.Current.IsKind(TokenKindKeyword.Ident))
                {
                    ProcNameRaw.NameText pt = new ProcNameRaw.NameText();
                    pt.TextToken = (LexTokenText)tape.Current;
                    procName.NameTerms.Add(pt);
                    tape.MoveNext();
                }
                else if (tape.Current.IsKind(TokenKindSymbol.Colon))
                {
                    break;
                }
                else
                {
                    tape.error("错误的过程名称");
                    break;
                }
            }
            return(procName);
        }
Esempio n. 2
0
 public void Analy()
 {
     NameParts.Clear();
     for (int i = 0; i < NameRaw.NameTerms.Count; i++)
     {
         var term = NameRaw.NameTerms[i];
         if (term is ProcNameRaw.NameBracket)
         {
             var pbrackets = (ProcNameRaw.NameBracket)term;
             List <MethodParameter> mps = new List <MethodParameter>();
             foreach (var item in pbrackets.Parameters)
             {
                 MethodParameter mp = new MethodParameter(this, item);
                 mp.Analy();
                 mps.Add(mp);
             }
             NameParts.Add(mps);
         }
         else if (term is ProcNameRaw.NameText)
         {
             ProcNameRaw.NameText t = (ProcNameRaw.NameText)term;
             string text            = t.TextToken.Text;
             NameParts.Add(text);
         }
         else
         {
             throw new CCException();
         }
     }
 }