def spec_stupac(self): stupac = AST(stablo='stupac') stupac.ime = self.pročitaj(SQL.IME) stupac.tip = self.pročitaj(SQL.IME) sljedeći = self.granaj(SQL.ZAREZ, SQL.OTVORENA, SQL.ZATVORENA) if sljedeći == SQL.OTVORENA: self.pročitaj(SQL.OTVORENA) stupac.veličina = self.pročitaj(SQL.BROJ) self.pročitaj(SQL.ZATVORENA) sljedeći = self.granaj(SQL.ZAREZ, SQL.ZATVORENA) if sljedeći == SQL.ZAREZ: self.pročitaj(SQL.ZAREZ) return stupac
def create(self): self.pročitaj(SQL.CREATE) self.pročitaj(SQL.TABLE) naredba = AST(stablo='naredba', vrsta=SQL.CREATE) naredba.tablica = self.pročitaj(SQL.IME) naredba.stupci = [] self.pročitaj(SQL.OTVORENA) while True: stupac = self.spec_stupac() naredba.stupci.append(stupac) if self.granaj(SQL.ZATVORENA, SQL.IME) == SQL.ZATVORENA: break self.pročitaj(SQL.ZATVORENA) return naredba
def izraz(self): č1 = self.član() dalje = self.granaj(Ar.KRAJ, Ar.PLUS, Ar.MINUS, Ar.ZATVORENA) if dalje == Ar.PLUS: self.pročitaj(Ar.PLUS) č2 = self.izraz() return AST(stablo='zbroj', lijevo=č2, desno=č1) elif dalje == Ar.MINUS: self.pročitaj(Ar.MINUS) č2 = self.izraz() return AST(stablo='razlika', lijevo=č2, desno=č1) else: return č1
def potenciranje(self): f1 = self.faktor() dalje = self.granaj(Ar.KRAJ, Ar.POTENCIJA, Ar.PUTA, Ar.PLUS, Ar.MINUS, Ar.ZATVORENA, Ar.OTVORENA, Ar.BROJ) if dalje == Ar.POTENCIJA: self.pročitaj(Ar.POTENCIJA) f2 = self.potenciranje() return AST(stablo='potenciranje', lijevo=f2, desno=f1) elif dalje == Ar.BROJ: f2 = self.potenciranje() return AST(stablo='umnožak', lijevo=f2, desno=f1) elif dalje == Ar.OTVORENA: f2 = self.potenciranje() return AST(stablo='umnožak', lijevo=f2, desno=f1) else: return f1
def select(self): naredba = AST(stablo='naredba', vrsta=SQL.SELECT) self.pročitaj(SQL.SELECT) što = self.granaj(SQL.ZVJEZDICA, SQL.IME) if što == SQL.ZVJEZDICA: self.pročitaj(SQL.ZVJEZDICA) naredba.sve = True elif što == SQL.IME: naredba.stupci = [] while True: stupac = self.pročitaj(SQL.IME) naredba.stupci.append(stupac) if self.granaj(SQL.ZAREZ, SQL.FROM) == SQL.FROM: break self.pročitaj(SQL.ZAREZ) self.pročitaj(SQL.FROM) naredba.tablica = self.pročitaj(SQL.IME) return naredba
def član(self): f1 = self.faktor() dalje = self.granaj(Ar.KRAJ, Ar.PUTA, Ar.PLUS, Ar.MINUS, Ar.ZATVORENA) if dalje == Ar.PUTA: self.pročitaj(Ar.PUTA) f2 = self.član() return AST(stablo='umnožak', lijevo=f2, desno=f1) else: return f1
def formula(self): fo = AST(stablo='formula') početak = self.granaj(LS.NEG, LS.PVAR, LS.OTV) if početak == LS.PVAR: fo.varijabla = self.pročitaj(LS.PVAR) elif početak == LS.NEG: fo.veznik = self.pročitaj(LS.NEG) fo.negirana = self.formula() elif početak == LS.OTV: self.pročitaj(LS.OTV) fo.lijeva = self.formula() fo.veznik = self.pročitaj(LS.KON, LS.DIS, LS.KOND, LS.BIKOND) fo.desna = self.formula() self.pročitaj(LS.ZATV) return fo