protected PsudoMethod CompileMethod(PsudoMethodInfo mInfo, PsudoClassInfo pClassInfo, PsudoClass pClass)
        {
            PsudoMethod method = new PsudoMethod(mInfo.Name, pClass);

            mInfo.ParentClass = pClassInfo;
            mInfo.Processed   = true;

            if (mInfo.Name != "Main")
            {
                Match value = Regex.Match(codeLines[mInfo.StartLine],
                                          @"(?<=[(])[a-zA-Z0-9_,\s -]*(?=[)])",
                                          RegexOptions.IgnoreCase);

                string[] args = value.Value.Split(',');
                foreach (string arg in args)
                {
                    if (arg.Trim().Length > 0)
                    {
                        Match typeMatch = Regex.Match(arg,
                                                      @"(string|num)",
                                                      RegexOptions.IgnoreCase);
                        Match match = Regex.Match(arg,
                                                  @"(?<=(string|num))[\s]*[a-zA-Z0-9_-]*",
                                                  RegexOptions.IgnoreCase);
                        method.ArgumentTypes.Add(typeMatch.Value.Trim().ToLower());
                        method.ArgumentNames.Add(match.Value.Trim().ToLower());
                    }
                }
            }

            method.Instructions = CompileBlock(method, mInfo.StartLine, mInfo.EndLine);
            return(method);
        }
 public PsudoMethodInfo(string name, int start)
 {
     this.Name        = name;
     this.StartLine   = start;
     this.EndLine     = -1;
     this.Processed   = false;
     this.ParentClass = null;
 }
        private void FindClasses()
        {
            this.classInfo = new List <PsudoClassInfo>();

            PsudoClassInfo curClass = null;

            for (int i = 0; i < lineTypes.Length; i++)
            {
                switch (lineTypes[i])
                {
                case PsudoLineType.StartClass:
                    if (curClass != null)
                    {
                        this.errors.Add(new CompileError(
                                            "Cannot Start Class Inside Body of another class", i));
                    }
                    else
                    {
                        Match match = Regex.Match(codeLines[i],
                                                  @"(?<=(class))[\s]*[a-zA-Z0-9_-]*",
                                                  RegexOptions.IgnoreCase);
                        curClass = new PsudoClassInfo(match.Value.Trim().ToLower(), i);
                    }

                    break;

                case PsudoLineType.EndClass:
                    if (curClass == null)
                    {
                        this.errors.Add(new CompileError(
                                            "End Class Found without Start Class", i));
                    }
                    else
                    {
                        curClass.EndLine = i;
                        this.classInfo.Add(curClass);
                        curClass = null;
                    }
                    break;

                default:
                    break;
                }
            }
        }