SHARE
TWEET

Untitled

a guest Jul 17th, 2019 71 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top