Advertisement
davidm1766

sqlParser-parser.py

May 22nd, 2017
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.17 KB | None | 0 0
  1. import pyparsing as pp
  2.  
  3. from sql.ast import ZoznamStlpcov, ZoznamTabuliek, Select, ZoznamPrikazov, VsetkyStlpce, Alias
  4.  
  5. NAZOV_STLPCA = pp.Word(pp.alphas) #slovo s malymi velkymi pismenami
  6. NAZOV_TABULKY = pp.Word(pp.alphas)
  7.  
  8. STLPEC = NAZOV_STLPCA + pp.Optional("as"+NAZOV_STLPCA)
  9. STLPEC.setParseAction(lambda tokeny: tokeny[0] if len(tokeny) == 1 else Alias(tokeny[0],tokeny[2]))
  10.  
  11. ZOZNAM_STLPCOV =  STLPEC + pp.ZeroOrMore(","+STLPEC) #zaciname nazvom stlpca a moze ich byt lubovolny pocet
  12. ZOZNAM_STLPCOV.setParseAction(lambda tokeny: ZoznamStlpcov(tokeny[::2])) #kazde parne lebo neparne su ciarky
  13.  
  14. ZOZNAM_TABULIEK = NAZOV_TABULKY + pp.ZeroOrMore(","+NAZOV_TABULKY)
  15. ZOZNAM_TABULIEK.setParseAction(lambda tokeny: ZoznamTabuliek(tokeny[::2]))
  16.  
  17. HVIEZDICKA = pp.Literal("*")
  18. HVIEZDICKA.setParseAction(lambda tokeny: VsetkyStlpce())
  19.  
  20.  
  21. SELECT = "select" + (ZOZNAM_STLPCOV | HVIEZDICKA) + "from" + ZOZNAM_TABULIEK
  22. SELECT.setParseAction(lambda tokeny: Select(tokeny[1],tokeny[3]))
  23.  
  24. PRIKAZY = pp.StringStart() + SELECT + pp.ZeroOrMore(";" +SELECT) + pp.Optional(";") + pp.StringEnd() #na konci mozem dat este ; ale nemusim
  25. PRIKAZY.setParseAction(lambda tokeny: ZoznamPrikazov(tokeny[::2]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement