BLUESTACK.ORG : datei7

HomePage :: PageIndex :: RecentChanges :: RecentlyCommented :: UserSettings :: You are 38.103.63.60
//datei-name: equal0.C (der syntax-check) #include "baum.h" void Baum::gBaum0(int k) { int i, fAst; int sl, sr; char t1, t2, v; sl = s[k].sl; sr = s[k].sr; t1 = s[k].t1; t2 = s[k].t2; v = s[k].v; glob = iF = 0; if (v != '"' || t2 != 's' || s[sr].v != 'f') { err = k; cout << "gBaum0"; return; } equalBaum(k); equalBaumClr(k); shadow0(k); if (err) return; { for (i = iF - 1; i >= 0; --i) { k = mintF[i]; fAst = s[k].sr; //1 locals = 0; if (s[fAst].t1 == 's') { k = s[fAst].sl; if (s[k].v == '}') umbau(fAst, 'l', s[k].sl, s[k].t1); } //2 if (s[fAst].t1 == 'w') { if (s[fAst].sl != 183) { err = fAst; cout << "gBaum0: \err"; return; } } else { iStruct = 0; k = s[fAst].sl; paramScan0(k); if (err) return; locals = k; //3 if (i == iF - 1) glob = locals; } k = s[fAst].sr; //4 fooScan0(k); } } } //1 funktion aus tabelle holen (s[fAst].v : 'f') //2 verwirft rckgabeTyp //3 locals : deklarationsAst fr lokale (im mainFall globale) variablen //4 k : funktionsRumpf void Baum::shadow0(int k) //listet (rekursiv) vorhandene funktionen auf. { int sl, sr; char t1, t2, v; sl = s[k].sl; sr = s[k].sr; t1 = s[k].t1; t2 = s[k].t2; v = s[k].v; if (v == '"') { if (t2 != 's') { err = k; cout << "shadow0: err/"; return; } if (s[sr].v == 'f') { if (s[sr].t2 != 's') { err = k; cout << "shadow0: err"; return; } for (i = 0; i < iF; ++i) { if (k == mintF[i]) return; } shadow0(s[sr].sr); mintF[iF] = k; ++iF; return; } } //: if (t1 == 's') shadow0(sl); if (t2 == 's') shadow0(sr); } void Baum::paramScan0(int k) { if (s[k].v == '.' || s[k].v == '') { if (s[k].t1 == 'w') { err = k; cout << "paramScan0: \err"; return; } paramScan0(s[k].sl); if (s[k].t2 == 'w') { err = k; cout << "paramScan0: err/"; return; } paramScan0(s[k].sr); } else varSBau0(k); } void Baum::varSBau0(int k) //prft variablen-deklaration { int i, k1, dim1, dim2; int sl, sr; char t1, t2, v; sl = s[k].sl; sr = s[k].sr; t1 = s[k].t1; t2 = s[k].t2; v = s[k].v; if (v == ':') { if (t1 == 's' || t2 == 's') { err = k; cout << "varSBau0: refSyntax"; } } //1 else if (v == ' ' || v == '^') //2 { if (t1 == 's') { err = k; cout << "varSBau0: \err"; return; } if (sl == ':') { if (v != ' ') { err = k; cout << "varSBau0: refSyntax"; } //1 return; } if (typScan0(sl)) { if (t2 == 's') varSBauRek0(sr); return; } if (t2 == 's') { err = k; cout << "varSBau0: typSyntax"; return; } if (iStruct) { for (i = 0; i < iStruct; ++i) { if (sl == s[mStruct[i]].sl) return; } } err = k; cout << "varSBau0: err"; } else if (v == '"') //3 { if (s[sr].v != '[') //4 { err = k; cout << "varSBau0: '[' exspected in /"; return; } if (s[sr].t1 == 'w') { if (typScan0(s[sr].sl)) return; } cout << "varSBau0: typ in *" << sr << "\\"; if (s[sr].t2 == 'w') { dim1 = atoi(w[s[sr].sr].st); if (! dim1) { err = sr; cout << "varSBau0: int exspected in /"; } } else { k1 = s[sr].sr; if (!(s[k1].v == '.' && s[k1].t1 == 'w' && s[k1].t2 == 'w')) { err = sr; cout << "varSBau0: / geht leider nicht"; return; } dim1 = atoi(w[s[k1].sl].st); dim2 = atoi(w[s[k1].sr].st); if (!(dim1 && dim2)) { err = sr; cout << "varSBau0: / geht leider nicht"; } } } else { if (v == 'S') //5 { if (t2 == 'w') { err = k; cout << "varSBau0: err"; return; } paramScan0(sr); if (err) return; mStruct[iStruct] = k; ++iStruct; } } } //1 unterscheidet zwischen lokalReferenz (ri : i) und paramReferenz (: ref) //2: z.b. int i char ^ p S s //3: label //4: array //5: struct char Baum::typScan0(int e) { if (e == char_ || e == int_ || e == atom_ || e == knot_ || e == back_ || e == long_ || e == float_ || e == double_ || e == uchar_ || e == uint_ || e == ulong_) return 1; else return 0; } void Baum::varSBauRek0(int k) { if (s[k].v != '.' && s[k].v != ':') { err = k; cout << "varSBauRek0: v-err"; return; } if (s[k].t1 == 's') varSBauRek0(s[k].sl); if (s[k].t2 == 's') varSBauRek0(s[k].sr); } void Baum::fooScan0(int k) { int sl, sr; char t1, t2, v; Ast = 0; if (err) return; sl = s[k].sl; sr = s[k].sr; t1 = s[k].t1; t2 = s[k].t2; v = s[k].v; if (t1 == 'w') { if (sl == '!' || sl == '?') { if (v != ' ' && v != '"') { err = k; cout << "fooScan0: v-err"; } else if (t2 == 's') fooScan0(sr); else if (sl != 183) varScanR0(k); return; } if (punkt0(sl)) { if (v != ' ') { err = k; cout << "fooScan0: v-err"; return; } } } if (v == ' ') blankScan0(k); else if (v == '"') { if (s[sr].v == 'f') return; if (s[sr].v == ' ' && s[sr].t2 == 'w' && s[sr].sr == '}') { if (s[sr].t1 == 's') fooScan0(s[sr].sl); else varScanL0(sr); return; } labScan0(k); if (err) return; fooScan0(sr); } else if (v == 'o') structScan0(k); else if (v == '#') knotScan0(k); //1 // else if (v == '') castScan0(k);//2 else if (v == '(') { if (t2 == 'w') { if (t1 != 'w') { err = k; cout << "fooScan0: crementSyntax"; } } } else if (v == ')') { if (t2 == 'w' && !(sr == '+' || sr == '-')) { err = k; cout << "fooScan0: crementSyntax"; } } else if (v == ':') { err = k; cout << "fooScan0: v-err"; } else if (v == '@') { err = k; cout << "fooScan0: v-err"; } else if (v == '^') { if (! typScan0(sl)) { err = k; cout << "fooScan0: castSyntax"; } } else { if (t1 == 's') fooScan0(sl); else varScanL0(k); if (t2 == 's') fooScan0(sr); else varScanR0(k); } } //k = funktionsrumpf (-f->) //f locals zeigt an ob ein deklarationsAst vorhanden ist //1 baumOperator # //2 castOperator void Baum::labScan0(int k) { char t2; int sl, sr; t2 = s[k].t2; sl = s[k].sl; sr = s[k].sr; if (sl == if_then) { if (s[sr].v != ',') { err = sr; cout << "labScan0: ',' expected"; } } else if (sl == do_while) { if (s[sr].v != ';') { err = sr; cout << "labScan0: ';' expected"; } } else if (sl == while_do) { if (s[sr].v != '_') { err = sr; cout << "labScan0: '_' expected"; } } else if (sl == for_do) { if (s[sr].v != '~') { err = sr; cout << "labScan0: '~' expected"; } else if (s[s[sr].sl].v != '&') { err = s[sr].sl; cout << "labScan0: '&' expected"; } else if (s[s[s[sr].sl].sl].v != '|') { err = s[s[sr].sl].sl; cout << "labScan0: '|' expected"; } } else if (s[sr].v == ' ') { if (s[sr].sl == '[') { worti = sl; getAst0(); if (! Ast) { err = sr; cout << "labScan0: var expected in '\'"; } betrag = atoi(w[s[sr].sr].st); if (!betrag) { err = sr; cout << "labScan0: int expected in '/'"; } } else if (s[sr].sl == '!') fooScan(sr); else { err = k; cout << "labScan0: err"; } } } char Baum::punkt0(int e) { if (e == '"' || e == '^' || e == 176 || e == 191 || e == '[' || e == goto_ || e == do_) return 1; //1 return 0; } //1 176 = '' . 191 = '' void Baum::getAst0() //setzt worti voraus . prft, ob worti eine gltige variable ist (Ast) { Ast = 0; if (locals) varTest0(locals); if (! Ast) { if (glob && glob != locals) varTest0(glob); } } void Baum::varTest0(int k) { if (! Ast) { if (s[k].v == '.' || s[k].v == '') { varTest0(s[k].sl); if (! Ast) varTest0(s[k].sr); } else if (s[k].v == ' ' || s[k].v == '^') { if (s[k].t2 == 'w') { if (worti == s[k].sr) Ast = k; } else { varTestRek0(s[k].sr); if (Ast) Ast = k; } } else if (s[k].v == '"') { if (worti == s[k].sl) Ast = s[k].sr; } else if (s[k].v == 'S') { if (worti == s[k].sl) Ast = s[k].sr; } else if (s[k].v == 'r') { if (worti == s[k].sl) Ast = s[k].sr; } } } void Baum::varTestRek0(int k) { if (s[k].t1 == 's') varTestRek0(s[k].sl); else if (worti == s[k].sl) Ast = 1; if (s[k].t2 == 's') varTestRek0(s[k].sr); else if (worti == s[k].sr) Ast = 1; } void Baum::structScan0(int k) { flag = 0; holz = s[k].sr; if (s[k].t1 == 's') { k = s[k].sl; if (s[k].v != '[') { err = k; cout << "structScan0: err"; return; } if (s[k].t1 != 'w') { err = k; cout << "structScan0: err"; return; } } worti = s[k].sl; getAst0(); if (! Ast) { err = k; cout << "structScan0: err"; return; } worti = s[Ast].sl; getAst0(); compScan0(Ast); if (! flag) { err = k; cout << "structScan0: err"; return; } } //1 wird nicht weiter getestet void Baum::compScan0(int k) { if (s[k].sl == holz) flag = 1; else if (s[k].t1 == 's') compScan0(s[k].sl); if (s[k].sr == holz) flag = 1; else if (s[k].t2 == 's') compScan0(s[k].sr); } void Baum::blankScan0(int k) { char t1, t2; int sl, sr; t1 = s[k].t1; t2 = s[k].t2; sl = s[k].sl; sr = s[k].sr; if (t1 == 's') { err = k; cout << "blankScan0: atom expected or v-err"; } else if (sl == 176 || sl == '-' || sl == 191) //1 { if (t2 == 'w') varScanR0(k); else fooScan0(sr); } else if (typScan0(sl)) { if (t2 == 's') fooScan0(sr); } else if (t2 == 's') { err = k; cout << "blankScan0: /-err"; } //2 else if (sl == '^') varScanR0(k); //3 else if (! punkt0(sl)) { err = k; cout << "blankScan0: \\-err"; } } //1 176: (dereferenzierung * p) a 191: //2 stringkonstante //3 reine adresse void Baum::knotScan0(int k) { int k1; if (s[k].t1 == 's') { k1 = k; while(s[k1].t1 == 's') { k1 = s[k1].sl; if (s[k1].v != '#') { err = k1; cout << "knotScan0: kein #"; return; } } worti = s[k1].sl; } else worti = s[k].sl; getAst0(); if (Ast) { if (s[Ast].sl != knot_ && s[Ast].sl != atom_ && s[Ast].sl != back_) { err = k1; cout << "knotScan0: kein gltiges baumElement"; } } } // die structKomponenten sind noch ungeprft void Baum::castScan0(int k) { int k1; k1 = s[k].sl; if (s[k].t1 == 's') k1 = s[k1].sr; if (typScan0(k1)) { if (s[k].t2 == 's') fooScan0(s[k].sr); else { worti = s[k].sr; getAst0(); if (! Ast) { err = k; cout << "castScan0: err"; } } } } /* void Baum::castScan0(int k) { int k1; k1 = s[k].sl; if (s[k].t1 == 's') k1 = s[k1].sr; if (typScan0(k1)) { if (s[k].t2 == 's') fooScan0(s[k].sr); else { worti = s[k].sr; getAst0(); if (! Ast) { err = k; cout << "castScan0: err"; } } } } */ void Baum::varScanL0(int k) { char t; worti = s[k].sl; txt0 = w[worti].st; t = isVal(); if (! t) { getAst0(); if (! Ast) { if (! noFct(worti)) { if (*w[worti].st != ':') // { if (s[k].v != '') { if (!(worti > cmdStart_ && worti < cmdEnd_)) { err = k; cout << "varScanL0: \\"; } } } } } } void Baum::varScanR0(int k) { char t; worti = s[k].sr; txt0 = w[worti].st; t = isVal(); if (! t) { getAst0(); if (! Ast) { if (! noFct(worti)) { if (*w[worti].st != ':') // { if (s[k].v != '') { if (!(worti > cmdStart_ && worti < cmdEnd_)) { err = k; cout << "varScanR0: /"; } } } } } }


back to baumC
There is no comment on this page. [Display comments/form]