Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.98 KB | None | 0 0
  1. import sys # для смены регистров
  2.  
  3.  
  4. def transliteration(data): # блок транслитерации
  5.  
  6. status = list(range(0, len(data)))
  7.  
  8. for i in range(0, len(data)):
  9.  
  10. if data[i].isalpha() == True:
  11. status[i] = [data[i], "буква"]
  12.  
  13. elif data[i].isdigit() == True:
  14. status[i] = [data[i], "цифра"]
  15.  
  16. elif data[i] == " ":
  17. status[i] = [data[i], "пробел"]
  18.  
  19. elif data[i] == "(":
  20. status[i] = [data[i], "скобка1"]
  21.  
  22. elif data[i] == ")":
  23. status[i] = [data[i], "скобка2"]
  24.  
  25. elif data[i] == "=":
  26. status[i] = [data[i], "равно"]
  27.  
  28. elif data[i] == ",":
  29. status[i] = [data[i], "запятая"]
  30.  
  31. elif data[i] == "_":
  32. status[i] = [data[i], "подчерк"]
  33.  
  34. elif data[i] == ";":
  35. status[i] = [data[i], "тчкзпт"]
  36. break
  37. else:
  38. status[i] = [data[i], "ошибка"]
  39. print("runtime error : unexpected symbol")
  40. a = "REJECT"
  41. vivod(a)
  42. sys.exit()
  43.  
  44. return status
  45.  
  46. def lexical(status): # лексический блок
  47. print(status)
  48. lexic = []
  49. i = 0
  50. t = len(status)
  51. while i < t:
  52. if status[i][1] == "буква":
  53. str1 = status[i][0]
  54. while True:
  55. i += 1
  56. if status[i][1] == "буква" or status[i][1] == "цифра" or status[i][1] == "подчерк":
  57. str2 = status[i][0]
  58. str1 = str1 + str2
  59. else:
  60. lexic.append([str1, "идентификатор"])
  61. break
  62.  
  63. elif status[i][1] == "тчкзпт":
  64. lexic.append([status[i][0], "тчкзпт"])
  65. i += 1
  66. elif status[i][1] == "пробел":
  67. i += 1
  68. elif status[i][1] == "скобка1":
  69. lexic.append([status[i][0], "скобка1"])
  70. i += 1
  71. elif status[i][1] == "запятая":
  72. lexic.append([status[i][0], "запятая"])
  73. i += 1
  74. elif status[i][1] == "скобка2":
  75. lexic.append([status[i][0], "скобка2"])
  76. i += 1
  77. else:
  78. i += 1
  79. return lexic
  80.  
  81.  
  82. def keyword(lexic): # блок поиска ключевых слов
  83. print(lexic)
  84. key = []
  85. i = 0
  86. key_word_pascal = ["and", "end", "nil", "set", "array", "file", "not", "then", "begin", "for", "of", "to", "case", "function",
  87. "or", "type", "const", "goto", "packed", "until", "div", "if", "procedure", "var", "do", "in", "program",
  88. "while", "downto", "label", "record", "with", "else", "mod", "repeat"]
  89. while i < (len(lexic)):
  90. if lexic[i][0] == "if":
  91. key.append("клслово1")
  92. i += 1
  93. elif lexic[i][0] == "then":
  94. key.append("клслово2")
  95. i += 1
  96. elif lexic[i][0] == "else":
  97. key.append("клслово3")
  98. i += 1
  99. elif lexic[i][1] == 'identifier':
  100. j = 0
  101. while j < len(key_word_pascal):
  102. if lexic[i][0] != key_word_pascal[j]:
  103. j += 1
  104. else:
  105. # key.append("keyword")
  106. lexic[i][1] = 'keyword';
  107. break
  108. key.append(lexic[i][1])
  109. i += 1
  110.  
  111. else:
  112. key.append(lexic[i][1])
  113. i += 1
  114. return key
  115.  
  116.  
  117.  
  118. def syntax(key): # синтаксический блок
  119. print(key)
  120. prim1 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'идентификатор',
  121. 'кв_скобка2', 'ариф_знак', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1', 'идентификатор',
  122. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  123.  
  124. prim2 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'число без ариф_знака',
  125. 'кв_скобка2', 'ариф_знак', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1', 'число без ариф_знака',
  126. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  127.  
  128. prim3 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'число с ариф_знаком',
  129. 'кв_скобка2', 'ариф_знак', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1', 'число с ариф_знаком',
  130. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  131.  
  132. prim4 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'число с ариф_знаком',
  133. 'кв_скобка2', 'ариф_знак', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1', 'число без ариф_знака',
  134. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  135.  
  136. prim5 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'число без ариф_знака',
  137. 'кв_скобка2', 'ариф_знак', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1', 'число с ариф_знаком',
  138. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  139.  
  140. prim6 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'идентификатор',
  141. 'кв_скобка2', 'ариф_знак', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1', 'число без ариф_знака',
  142. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  143.  
  144. prim7 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'число без ариф_знака',
  145. 'кв_скобка2', 'ариф_знак', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1', 'идентификатор',
  146. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  147.  
  148. prim8 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'число с ариф_знаком',
  149. 'кв_скобка2', 'ариф_знак', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1', 'идентификатор',
  150. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  151.  
  152. prim9 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'идентификатор',
  153. 'кв_скобка2', 'ариф_знак', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1', 'число с ариф_знаком',
  154. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  155.  
  156. prim10 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'идентификатор',
  157. 'кв_скобка2', 'деление', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1',
  158. 'идентификатор',
  159. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  160.  
  161. prim11 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'число без ариф_знака',
  162. 'кв_скобка2', 'деление', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1',
  163. 'число без ариф_знака',
  164. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  165.  
  166. prim12 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'число с ариф_знаком',
  167. 'кв_скобка2', 'деление', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1',
  168. 'число с ариф_знаком',
  169. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  170.  
  171. prim13 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'число с ариф_знаком',
  172. 'кв_скобка2', 'деление', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1',
  173. 'число без ариф_знака',
  174. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  175.  
  176. prim14 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'число без ариф_знака',
  177. 'кв_скобка2', 'деление', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1',
  178. 'число с ариф_знаком',
  179. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  180.  
  181. prim15 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'идентификатор',
  182. 'кв_скобка2', 'деление', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1',
  183. 'число без ариф_знака',
  184. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  185.  
  186. prim16 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'число без ариф_знака',
  187. 'кв_скобка2', 'деление', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1',
  188. 'идентификатор',
  189. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  190.  
  191. prim17 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'число с ариф_знаком',
  192. 'кв_скобка2', 'деление', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1',
  193. 'идентификатор',
  194. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  195.  
  196. prim18 = ['идентификатор', 'присваивание', 'идентификатор', 'кв_скобка1', 'идентификатор',
  197. 'кв_скобка2', 'деление', 'идентификатор', 'кр_скобка1', 'идентификатор', 'кв_скобка1',
  198. 'число с ариф_знаком',
  199. 'кв_скобка2', 'кр_скобка2', 'тчкзпт']
  200.  
  201.  
  202. if key == prim1 or key == prim2 or key == prim3 or \
  203. key == prim4 or key == prim5 or key == prim6 or key == prim7 or \
  204. key == prim8 or key == prim9 or key == prim10 or key == prim11 or \
  205. key == prim12 or key == prim13 or key == prim14 or key == prim15 or \
  206. key == prim16 or key == prim17 or key == prim18:
  207. return "ACCEPT"
  208. else:
  209. return "REJECT"
  210.  
  211. def vvod(): # блок чтения цепочек из файла(ввод данных)
  212. f = open("input.txt") # открытие файла
  213. str = f.read() # чтение файла
  214. f.close()
  215. str = str.lower() # понижение регистра
  216. return str
  217.  
  218.  
  219. def vivod(a): # блок записи соответствия цепочеек в файл(вывод данных)
  220. w = open("output.txt", "w") # открытие файла для записи
  221. w.write(a)
  222. w.close()
  223. return print("The program is completed")
  224.  
  225. def main(): # вызов всех подпрограмм
  226. str1 = vvod()
  227. status = transliteration(str1)
  228. lexic = lexical(status)
  229. key = keyword(lexic)
  230. vivod(syntax(key))
  231. return 0
  232. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement