public Vareble(string name, VaribleKind kind) { this.name = name; this.kind = kind; }
/*инициализирует вид переменной с именем name*/ static bool DetermineVarible(string name, VaribleKind kind) { bool result; if (!(result = DetermineVaribleInArr(ref LocalVaribles, ref name, kind))) result = DetermineVaribleInArr(ref GlobalVaribles, ref name, kind); return result; }
/*инициализирует вид переменной с именем name в массиве arr*/ static bool DetermineVaribleInArr(ref Vareble[] arr, ref string name, VaribleKind kind) { int i = 0; bool result = false; while ((i < arr.Length) && !result) { result = String.Compare(arr[i].name, name, true) == 0; if (result) arr[i].kind = arr[i].kind | kind; i++; } return result; }
/*определяет назночение переменных в подпрограммах*/ static void AnalyzeMethod(ref string str, ref int pos, VaribleKind kind) { string ident; char symbol; do { ident = FindNextIdentifier(ref str, ref pos, false); DetermineVarible(ident, kind); do { symbol = FindNextSymbol(ref str, ref pos); } while ((symbol != ';') && !IsLetterOfIdent(symbol)); if (IsLetterOfIdent(symbol)) { pos--; ident = FindNextIdentifier(ref str, ref pos, true); } } while (!(FindWordInArray(ref ident, ref WordsOfEndOperator) || symbol == ';')); }