Advertisement
Guest User

Untitled

a guest
May 29th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.18 KB | None | 0 0
  1. import gpkit as gp
  2. import re
  3. '''Фичалист:
  4. 1. Парсинг функций
  5. 2. Создание модели
  6. 3. Решение в удобоваримом виде
  7. 4. GUI
  8. 5. Сборка всего этого чуда в exe/другой файл (лишь бы поднималось)
  9.  
  10. План работ:
  11. 1. Разделение строки на элементы
  12. 2. Структурирование в словарь (json-like)
  13. 3. Разработка структуры классов
  14. 4. Инициализация функции по строке через словарь элементов'''
  15.  
  16. omega1 = map (gp.Variable,["x","y","z"])
  17. print omega1
  18.  
  19.  
  20. import re
  21. import json
  22. import math
  23.  
  24. '''Идея работы парсера состоит в последовательном разбивании входящей функции по операторам на операнды.
  25. В числе операторов содержатся также скобки, поэтому разбивание происходит до нахождения атомарных переменных.
  26. Пример результата работы:
  27. {
  28.    "function":
  29.    {
  30.        "name":"root_function",
  31.        "elements":
  32.        {
  33.            "(":"open_bracket",
  34.            "function":
  35.                {
  36.                    "name":"sin",
  37.                    "elements":
  38.                        {
  39.                            "(":"open_bracket",
  40.                            "x":"atomic_function",
  41.                            "+":"operator",
  42.                            "x^2":"atomic_function",
  43.                            "-":"operator",
  44.                            2:"constant",
  45.                            ")":"close_bracket"
  46.                        }
  47.                },
  48.            ")":"close_bracket"
  49.        }
  50.    }
  51. }
  52.  
  53. Open and close brackets are flags for initialization of Function object in code.
  54. If we got expression in brackets without calling a function, we still initialize it as Function object.
  55.  
  56. After the initialization call for ElementaryFunction object it separates on operators like
  57.  
  58. It is explicit example of JSON-structure of parsed string. After writing of OOP-module, there will
  59.  
  60. Идея по структуре наследования:
  61. (Constant & Variable) -> AtomicFunction or ElementaryFunction -> Function
  62. '''
  63.  
  64. #Service dictionaries
  65. entityDict = {
  66.         ')':'open_bracket',
  67.         '(':'close_bracket',
  68.         '+':'operator',
  69.         '-':'operator',
  70.         '*':'operator',
  71.         '\\':'operator',
  72.         '/':"operator",
  73.         '\w':'variable' }
  74.  
  75. functionDict = {
  76.     'sin':math.sin
  77. }
  78.  
  79. #Separation block
  80. testString = "(sin(x))^2+cos^2(x+1)+x+x^2+10";
  81. bracketSplitList = re.split('(\(|\))',testString)
  82. operatorSplitList = [];
  83. for i in range (0,len(bracketSplitList)):
  84.     splittedIterList = (re.split ('(\+|\-|\*|\/)',bracketSplitList[i]))
  85.     for j in range(0,len(splittedIterList)):
  86.         operatorSplitList.append(splittedIterList[j])
  87. #print operatorSplitList
  88.  
  89. #Structuring block
  90. for i in range (0,len(operatorSplitList)):
  91.     if ((operatorSplitList[i]=='')||(operatorSplitList[i]==' '):
  92.         operatorSplitList.remove(i)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement