//条件语句
        private void ConditionCode()
        {
            LexicalAnalysisResult lex = (LexicalAnalysisResult)Lexresult[i];

            if (lex.Type != LexicalAnalysis.IFSY)
            {
                //flag = false;
                //Console.WriteLine("错误:此处应为if");
                return;
            }
            i++;
            Condition();
            lex = (LexicalAnalysisResult)Lexresult[i];
            if (lex.Type != LexicalAnalysis.THENSY)
            {
                flag = false;
                Console.WriteLine("错误:缺少then");
                errors.Add(new Error("错误:缺少then", lex.Line));
                return;
            }
            i++;
            int bufjpc = 0, bufcodeaddr = codeAddr;

            PCodes.Add(new PCode(codeAddr, PCode.JPC, 0, 0));//y值还需要改成后面的bufjpc
            codeAddr++;
            Code();
            //i++
            lex    = (LexicalAnalysisResult)Lexresult[i];
            bufjpc = codeAddr;
            PCode pc = (PCode)PCodes[bufcodeaddr];

            pc.Y = bufjpc;//??
            PCodes[bufcodeaddr] = pc;
            if (lex.Type != LexicalAnalysis.ELSE)
            {
                return;
            }
            else
            {
                i++;
                Code();
                return;
            }
        }
 public void Analysis()
 {
     MainProgram();
     if (flag == true)
     {
         string       file = "pcode.txt";
         StreamWriter wr   = new StreamWriter(new FileStream(file, FileMode.Create, FileAccess.Write));
         for (int i = 0; i < PCodes.Count; i++)
         {
             PCode pc = (PCode)PCodes[i];
             wr.WriteLine(pc.PrintPCode());
             wr.Flush();
         }
         wr.Close();
         String name = System.IO.Directory.GetCurrentDirectory();
         Console.WriteLine(name);
         Form1.ShowError("生成的P-Code文件已保存到\n" + name + "\\pcode.txt", 0);
     }
     else
     {
         Error err = (Error)errors[0];
         err.ErrorMsgSend();
     }
 }
        //过程说明部分
        private void ProcIndicate()
        {
            //JMP 0 主程序入口
            PCodes.Add(new PCode(codeAddr, PCode.JMP, 0, 0));
            int bufcodeaddr = codeAddr;

            //JMP此处的0表示待定
            codeAddr++;
            LexicalAnalysisResult lex = (LexicalAnalysisResult)Lexresult[i];

            //标识符
            if (lex.Type != LexicalAnalysis.IDSY)
            {
                flag = false;
                Console.WriteLine("错误:procedure后应为标识符");
                errors.Add(new Error("错误:procedure后应为标识符", lex.Line));
                return;
            }
            Symbols sym = new Symbols();

            sym.Name  = lex.Content;
            sym.Type  = (int)Symbols.SymTypes.PROC;
            sym.Level = level;
            sym.Value = codeAddr + 1;
            sym.Addr  = addr[level];
            addr[level]++;
            //;
            PCodes.Add(new PCode(codeAddr, PCode.JMP, 0, codeAddr + 1));
            codeAddr++;

            i++;
            lex = (LexicalAnalysisResult)Lexresult[i];
            if (lex.Type != LexicalAnalysis.SEMISY)
            {
                flag = false;
                Console.WriteLine("缺少 ;");
                errors.Add(new Error("错误:缺少 ;", lex.Line));
                return;
            }
            for (int i = symbols.Count - 1; i >= 0; i--)
            {
                Symbols tempsym = (Symbols)symbols[i];
                if (tempsym.Name.Equals(sym.Name) && level == tempsym.Level)
                {
                    flag = false;
                    Console.WriteLine("错误:符号表已存在标识符" + sym.Name);
                    errors.Add(new Error("错误:符号表已存在标识符" + sym.Name, lex.Line));
                    return;
                }
            }
            symbols.Add(sym);
            i++;
            level++;
            if (level > 10)
            {
                flag = false;
                errors.Add(new Error("错误:分程序层次过多", lex.Line));
                return;
            }
            Program();
            //符号表删除
            int cnt = symbols.Count - 1;

            for (int i = cnt; i >= 0; i--)
            {
                Symbols sym_prerem = (Symbols)symbols[i];
                if (sym_prerem.Level == level)
                {
                    symbols.RemoveAt(i);
                }
            }
            level--;
            //i++;
            lex = (LexicalAnalysisResult)Lexresult[i];
            if (lex.Type != LexicalAnalysis.SEMISY)
            {
                flag = false;
                Console.WriteLine("缺少 ;");
                errors.Add(new Error("错误:缺少 ;", lex.Line));
                return;
            }
            i++;

            PCode pc = (PCode)PCodes[bufcodeaddr];

            pc.Y = codeAddr;

            PCodes.Add(new PCode(codeAddr, PCode.OPR, 0, 0));
            codeAddr++;

            lex = (LexicalAnalysisResult)Lexresult[i];
            if (lex.Type == LexicalAnalysis.PROCEDURE)
            {
                i++;
                ProcIndicate();
            }
            else
            {
                //i++;
                return;
            }
        }