Advertisement
Guest User

Untitled

a guest
Dec 7th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.21 KB | None | 0 0
  1. import fileinput
  2.  
  3. PRIJEVODNA_JEDINICA = '<prijevodna_jedinica>'
  4. VANJSKA_DEKLARACIJA = '<vanjska_deklaracija>'
  5. DEFINICIJA_FUNKCIJE = '<definicija_funkcije>'
  6. DEKLARACIJA = '<deklaracija>'
  7. IME_TIPA = '<ime_tipa>'
  8. LISTA_INIT_DEKLARATORA = '<lista_init_deklaratora>'
  9. LISTA_PARAMETARA = '<lista_parametara>'
  10. SLOZENA_NAREDBA = '<slozena_naredba>'
  11. DEKLARACIJA_PARAMETRA = '<deklaracija_parametra>'
  12. SPECIFIKATOR_TIPA = '<specifikator_tipa>'
  13. LISTA_NAREDBI = '<lista_naredbi>'
  14. LISTA_DEKLARACIJA = '<lista_deklaracija>'
  15. NAREDBA = '<naredba>'
  16. IZRAZ_NAREDBA = '<izraz_naredba>'
  17. NAREDBA_SKOKA = '<naredba_skoka>'
  18. NAREDBA_GRANANJA = '<naredba_grananja>'
  19. NAREDBA_PETLJE = '<naredba_petlje>'
  20. IZRAZ = '<izraz>'
  21. IZRAZ_PRIDRUZIVANJA = '<izraz_pridruzivanja>'
  22. POSTFIKS_IZRAZ = '<postfiks_izraz>'
  23. LOG_ILI_IZRAZ = '<log_ili_izraz>'
  24. LOG_I_IZRAZ = '<log_i_izraz>'
  25. BIN_ILI_IZRAZ = '<bin_ili_izraz>'
  26. BIN_XILI_IZRAZ = '<bin_xili_izraz>'
  27. BIN_I_IZRAZ = '<bin_i_izraz>'
  28. JEDNAKOSNI_IZRAZ = '<jednakosni_izraz>'
  29. ODNOSNI_IZRAZ = '<odnosni_izraz>'
  30. ADITIVNI_IZRAZ = '<aditivni_izraz>'
  31. MULTIPLIKATIVNI_IZRAZ = '<multiplikativni_izraz>'
  32. CAST_IZRAZ = '<cast_izraz>'
  33. UNARNI_IZRAZ = '<unarni_izraz>'
  34. UNARNI_OPERATOR = '<unarni_operator>'
  35. PRIMARNI_IZRAZ = '<primarni_izraz>'
  36. LISTA_ARGUMENATA = '<lista_argumenata>'
  37.  
  38. class Node:
  39. def __init__(self):
  40. self.parent = None
  41. self.children = []
  42. self.value = None
  43. self.depth = None
  44. pass
  45. def __str__(self):
  46. return self.value
  47.  
  48. def solveListaDeklaracija(node):
  49. if node.children[0].value == DEKLARACIJA:
  50. solveDeklaracija(node.children[0])
  51. else:
  52. solveListaDeklaracija(node.children[0])
  53. solveDeklaracija(node.children[1])
  54.  
  55. def solveSpecifikatorTipa(node):
  56. print("TODO: " + SPECIFIKATOR_TIPA + ", ovdje NEMA daljeg širenja!")
  57.  
  58. def solveUnarniOperator(node):
  59. print("TODO: " + UNARNI_OPERATOR)
  60.  
  61. def solveUnarniIzraz(node):
  62. if node.children[0].value == POSTFIKS_IZRAZ:
  63. solvePostfiksIzraz(node.children[0])
  64. elif node.children[1].value == UNARNI_IZRAZ:
  65. solveUnarniIzraz(node.children[1])
  66. else:
  67. solveUnarniOperator(node.children[0])
  68. solveCastIzraz(node.children[1])
  69.  
  70. def solveCastIzraz(node):
  71. if node.children[0].value == UNARNI_IZRAZ:
  72. solveUnarniIzraz(node.children[0])
  73. else:
  74. solveImeTipa(node.children[1])
  75. solveCastIzraz(node.children[3])
  76.  
  77. def solveMultiplikativniIzraz(node):
  78. if node.children[0].value == MULTIPLIKATIVNI_IZRAZ:
  79. solveMultiplikativniIzraz(node.children[0])
  80. solveCastIzraz(node.children[2])
  81. else:
  82. solveCastIzraz(node.children[0])
  83.  
  84. def solveAditivniIzraz(node):
  85. if node.children[0].value == ADITIVNI_IZRAZ:
  86. solveAditivniIzraz(node.children[0])
  87. solveMultiplikativniIzraz(node.children[2])
  88. else:
  89. solveMultiplikativniIzraz(node.children[0])
  90.  
  91. def solveOdnosniIzraz(node):
  92. if node.children[0].value == ODNOSNI_IZRAZ:
  93. solveOdnosniIzraz(node.children[0])
  94. solveAditivniIzraz(node.children[2])
  95. else:
  96. solveAditivniIzraz(node.children[0])
  97.  
  98. def solveJednakosniIzraz(node):
  99. if node.children[0].value == JEDNAKOSNI_IZRAZ:
  100. solveJednakosniIzraz(node.children[0])
  101. solveOdnosniIzraz(node.children[2])
  102. else:
  103. solveOdnosniIzraz(node.children[0])
  104.  
  105. def solveBinIIzraz(node):
  106. if node.children[0].value == BIN_I_IZRAZ:
  107. solveBinIIzraz(node.children[0])
  108. solveJednakosniIzraz(node.children[2])
  109. else:
  110. solveJednakosniIzraz(node.children[0])
  111.  
  112. def solveBinXiliIzraz(node):
  113. if node.children[0].value == BIN_I_IZRAZ:
  114. solveBinIIzraz(node.children[0])
  115. else:
  116. solveBinXiliIzraz(node.children[0])
  117. solveBinIIzraz(node.children[2])
  118.  
  119. def solveBinIliIzraz(node):
  120. if node.children[0].value == BIN_XILI_IZRAZ:
  121. solveBinXiliIzraz(node.children[0])
  122. else:
  123. solveBinIliIzraz(node.children[0])
  124. solveBinXiliIzraz(node.children[2])
  125.  
  126. def solveLogIIzraz(node):
  127. if node.children[0].value == LOG_I_IZRAZ:
  128. solveLogIIzraz(node.children[0])
  129. solveBinIliIzraz(node.children[2])
  130. else:
  131. solveBinIliIzraz(node.children[0])
  132.  
  133. def solveLogIliIzraz(node):
  134. if node.children[0].value == LOG_ILI_IZRAZ:
  135. solveLogIliIzraz(node.children[0])
  136. solveLogIIzraz(node.children[2])
  137. else:
  138. solveLogIIzraz(node.children[0])
  139.  
  140. def solvePrimarniIzraz(node):
  141. if len(node.children) == 3:
  142. solveIzraz(node.children[1])
  143.  
  144. def solveListaArgumenata(node):
  145. if node.children[0].value == LISTA_ARGUMENATA:
  146. solveListaArgumenata(node.children[0])
  147. solveIzrazPridruzivanja(node.children[2])
  148. else:
  149. solveIzrazPridruzivanja(node.children[0])
  150.  
  151. def solvePostfiksIzraz(node):
  152. if node.children[0].value == PRIMARNI_IZRAZ:
  153. solvePrimarniIzraz(node.children[0])
  154. else:
  155. solvePostfiksIzraz(node.children[0])
  156. if len(node.children) > 2:
  157. if node.children[2].value == IZRAZ:
  158. solveIzraz(node.children[2])
  159. elif node.children[2].value == LISTA_ARGUMENATA:
  160. solveListaArgumenata(node.children[2])
  161.  
  162. def solveIzrazPridruzivanja(node):
  163. if node.children[0].value == LOG_ILI_IZRAZ:
  164. solveLogIliIzraz(node.children[0])
  165. else:
  166. solvePostfiksIzraz(node.children[0])
  167. solveIzrazPridruzivanja(node.children[2])
  168.  
  169. def solveIzraz(node):
  170. if node.children[0].value == IZRAZ_PRIDRUZIVANJA:
  171. solveIzrazPridruzivanja(node.children[0])
  172. else:
  173. solveIzraz(node.children[0])
  174. solveIzrazPridruzivanja(node.children[2])
  175.  
  176. def solveIzrazNaredba(node):
  177. if node.children[0].value == IZRAZ:
  178. solveIzraz(node.children[0])
  179.  
  180. def solveNaredbaGrananja(node):
  181. print("TODO: " + NAREDBA_GRANANJA)
  182.  
  183. def solveNaredbaPetlje(node):
  184. print("TODO: " + NAREDBA_PETLJE)
  185.  
  186. def solveNaredbaSkoka(node):
  187. if node.children[1].value == IZRAZ:
  188. solveIzraz(node.children[1])
  189.  
  190. def solveNaredba(node):
  191. if node.children[0].value == SLOZENA_NAREDBA:
  192. solveSlozenaNaredba(node.children[0])
  193. elif node.children[0].value == IZRAZ_NAREDBA:
  194. solveIzrazNaredba(node.children[0])
  195. elif node.children[0].value == NAREDBA_GRANANJA:
  196. solveNaredbaGrananja(node.children[0])
  197. elif node.children[0].value == NAREDBA_PETLJE:
  198. solveNaredbaPetlje(node.children[0])
  199. else:
  200. solveNaredbaSkoka(node.children[0])
  201.  
  202. def solveListaNaredbi(node):
  203. if node.children[0].value == NAREDBA:
  204. solveNaredba(node.children[0])
  205. else:
  206. solveListaNaredbi(node.children[0])
  207. solveNaredba(node.children[1])
  208.  
  209. def solveImeTipa(node):
  210. if node.children[0].value == SPECIFIKATOR_TIPA:
  211. solveSpecifikatorTipa(node.children[0])
  212. else:
  213. solveSpecifikatorTipa(node.children[1])
  214.  
  215. def solveListaInitDeklaratora(node):
  216. print("TODO: " + LISTA_INIT_DEKLARATORA)
  217.  
  218. def solveSlozenaNaredba(node):
  219. if node.children[1].value == LISTA_NAREDBI:
  220. solveListaNaredbi(node.children[1])
  221. else:
  222. solveListaDeklaracija(node.children[1])
  223. solveListaNaredbi(node.children[2])
  224.  
  225. def solveDeklaracijaParametra(node):
  226. solveImeTipa(node.children[0])
  227.  
  228. def solveListaParametara(node):
  229. if node.children[0].value == DEKLARACIJA_PARAMETRA:
  230. solveDeklaracijaParametra(node.children[0])
  231. else:
  232. solveListaParametara(node.children[0])
  233. solveDeklaracijaParametra(node.children[2])
  234.  
  235. def solveDeklaracija(node):
  236. solveImeTipa(node.children[0])
  237. solveListaInitDeklaratora(node.children[1])
  238.  
  239. def solveDefinicijaFunkcije(node):
  240. if node.children[3].value == LISTA_PARAMETARA:
  241. solveImeTipa(node.children[0])
  242. solveListaParametara(node.children[3])
  243. solveSlozenaNaredba(node.children[5])
  244. else:
  245. solveImeTipa(node.children[0])
  246. solveSlozenaNaredba(node.children[5])
  247.  
  248.  
  249. def solveVanjskaDeklaracija(node):
  250. if node.children[0].value == DEFINICIJA_FUNKCIJE:
  251. solveDefinicijaFunkcije(node.children[0])
  252. else:
  253. solveDeklaracija(node.children[0])
  254.  
  255. def solvePrijevodnaJedinica(node):
  256. if node.children[0].value == VANJSKA_DEKLARACIJA:
  257. solveVanjskaDeklaracija(node.children[0])
  258. else:
  259. solvePrijevodnaJedinica(node.children[0])
  260. solveVanjskaDeklaracija(node.children[1])
  261.  
  262. def solve(node):
  263. if node.value == PRIJEVODNA_JEDINICA:
  264. solvePrijevodnaJedinica(node)
  265. print("Gotovo")
  266.  
  267. def main():
  268. #UCITAVANJE STABLA
  269. lastNode = None
  270. root = Node()
  271.  
  272. for line in fileinput.input("input/2.in"):
  273. depth = len(line) - len(line.lstrip(' '))
  274. val = line.strip()
  275. if lastNode is None:
  276. root.value = val
  277. root.depth = 0
  278. lastNode = root
  279. else:
  280. while lastNode.depth >= depth:
  281. lastNode = lastNode.parent
  282. currNode = Node()
  283. currNode.value = val
  284. currNode.depth = depth
  285. currNode.parent = lastNode
  286. lastNode.children.append(currNode)
  287. lastNode = currNode
  288.  
  289. #RJESAVANJE
  290. solve(root)
  291.  
  292. if __name__ == "__main__":
  293. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement