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; } } }