Форум программистов, компьютерный форум CyberForum.ru

Реализовать интерпретатор для вычисления функций - Python

Восстановить пароль Регистрация
 
LisAlice
0 / 0 / 0
Регистрация: 03.11.2015
Сообщений: 3
19.12.2016, 19:18     Реализовать интерпретатор для вычисления функций #1
Необходимо реализовать интерпретатор для вычисления функций в обычном базисе Клини.
Есть основной код, нужна помощь с классом FunctionS, S(x)=x+1 - функция следования.

Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
def extract_args(string):
    """ Функция для анализа строки, содержащей аргументы: (10,U[2,2](1,1),5) """
 
    proc_str = string[1:-1]
    num_parenthesis = 0
    num_brackets = 0
    start = 0
    args = list()
    for ch_num, ch in enumerate(proc_str):
        if ch == u'(':
            num_parenthesis += 1
        elif ch == u')':
            num_parenthesis -= 1
        elif ch == u'[':
            num_brackets += 1
        elif ch == u']':
            num_brackets -= 1
        elif ch == u',' and num_parenthesis == 0 and num_brackets == 0:
            args.append(proc_str[start : ch_num])
            start = ch_num + 1
    
    args.append(proc_str[start :])
    
    return [global_parse_string(arg) for arg in args]
 
 
def args_to_unicode(args):
    """ Утилитарная функция для преобразования списка аргументов в строку. """
 
    return u','.join([unicode(arg) for arg in args])
 
            
def global_eval(obj):
    """ Функция для вычисления значения объекта. """
 
    print unicode(obj)
    if type(obj) is int:
        # Если объект - это число, то просто возвращаем его
        return obj
    else:
        # Если объект - это функция, то вычисляем ее
        return obj.eval_obj()
 
    
class FunctionU(object):
    """ 
    Объект-функция проекции, например, U[2,1](1,2) == 1 
    U[<кол-во аргументов>,<номер возвращаемого аргумента>](<аргумент1>,<аргумент2>)
    """
 
    def __init__(self, string):
        super(FunctionU, self).__init__()
        self.num_args = -1
        self.targ_arg = -1
        self.args = list()
        
        self._parse_string(string)
        
    def _parse_string(self, string):
        """ Функция для анализа строки. """
        start = string.find(u'[')
        end = string.find(u']', start)
        self.num_args, self.targ_arg = string[start + 1 : end].split(u',')
        self.num_args = int(self.num_args.strip())
        self.targ_arg = int(self.targ_arg.strip())
        
        self.args = extract_args(string[end + 1 : ])
        
    def eval_obj(self):
        """ Вычисляем функцию U: возвращаем заданный аргумент. """
        return global_eval(self.args[self.targ_arg - 1])
    
    def __unicode__(self):
        return u'U[{},{}]({})'.format(self.num_args, 
                                      self.targ_arg, 
                                      args_to_unicode(self.args))
        
        
class FunctionS(object):
    """ Функция следования. S(x) = x + 1. Вам необходимо ее реализовать. """
    def __init__(self,string):
        pass # Your code here.
        
    def eval_obj(self):
        pass # Your code here.
    
    def __unicode__(self):
        pass # Your code here.
    
    
def global_parse_string(string):
    """ Функция для анализа входной строки. """
    proc_str = string.strip()
    
    tp = proc_str[0]
    if tp == u'U':
        return FunctionU(proc_str[1:])
    elif tp == u'S':
        return FunctionS(proc_str[1:])
    elif tp.isdigit():
        return int(proc_str)
    else:
        raise ValueError()
        
syntax_tree = global_parse_string(u'S(S(S(U[3,2](U[1,1](1),S(U[2,2](1,6)),3))))')
global_eval(syntax_tree)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2016, 19:18     Реализовать интерпретатор для вычисления функций
Посмотрите здесь:

Visual Basic Интерпретатор функций
C++ Реализовать командный интерпретатор
Реализовать алгоритмы поиска Python
Python Реализовать два приложения, вычисляющих сумму ряда Маклорена для функций

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 02:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru