Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Интерпретаторы и жизнь.

Автор Марбол, ноября 24, 2013, 21:40

0 Пользователи и 1 гость просматривают эту тему.

Марбол

Здравствуйте!

Недавно я решил следующую прикладную задачу: написать на VBA программу, которая получает на входе текстовый файл, содержащий набор алгебраических формул и числовые значения всех величин в них, и выдает массив с результатами вычислений по этим формулам.
Формулы могут включать в себя: 0) вещественные и целочисленные переменные (их числовые значения указываются в том же исходном файле); 1) бинарные операции: алгебраические, логические и другие (их состав и взаимный порядок выполнения могут несложно изменяться); 2) общеизвестные элементарные функции одного переменного: синус, косинус, тангенс, котангенс, логарифм, модуль, знак, корень квадратный, арктангенс (их перечень может изменяться); 3) условную конструкцию вида "формула при условие" (пока рассматривается не наравне с бинарными операциями); 4) задание одномерных массивов: как поэлементно, так и по начальной и конечной точкам и числу элементов (массив первого типа возможен только один).

С точки зрения результата, программа хороша, поскольку выполняет ровно всё то и там, для чего создавалась. С точки зрения алгоритма, программа не вполне совершенна, поскольку я писал её, не обращаясь ни к какой специальной литературе.

Например, исходный файл может иметь следующий вид (с употреблением всех возможностей):

a = 1
b = -0.5
c = 1.2345
d = 2.22
e = 3
f = 444
n1 = 10
n2 = 222
n3 = 5
dn = 3

fff1 = arctg(a+b*c/f)^d- |e| при e+sin(ln(cos(f+g/(e*d)-f^2)))>=e или (c-d<b и a<=b*c)
fff1 = |e| при -e+sin(ln(cos(f+g/(e*d)-f^n3)))<e
bububu = a*b ... c-d/f*R(a-c+d-e+f) N n1+dn
ssss = a ... b N n2
t = a ... b N n3
cond1 = (a>=b и c-d<f*e) или a>b=c>=d>e>=f
cond2 = a=f
массив = a; b; c; fff1; t при cond1
массив = a*b; c-d; sss при cond2


Этот пример исходного файла совершенно вымышленный. Жирным шрифтом выделены ключевые слова этого языка программирования.
Сверху задаются числовые значения всех используемых величин; затем идут формулы.

Сперва идут две условные формулы для вычисления fff1 при том или ином условии; оно может содержать алгебраические выражения, логические операции и операции сравнения.

Формулы bububu, ssss и t определяют одномерные массивы, для каждого из которых задаются начальная, конечная точки и количество интервалов разбиения отрезка.

Формулы cond1 и cond2 задают некоторые логические условия, используемые ниже
Формулы массив и массив поэлементно определяют состав массива в зависимости от того, выполняются ли условия cond1, cond2 (т. е. равны ли единице числа cond1, cond2).

Использование этого интерпретатора организовано так, чтобы оставались доступными все массивы, созданные при выполнении такой программки. Но фактически массив массив используется потом по-другому, чем массивы bububu, ssss и t.

Python

Выкладывайте исходники, посмотрим. Может, у кого-то какие-то идеи появятся, как улучшить алгоритм.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Марбол

Цитата: Python от ноября 24, 2013, 21:52
Выкладывайте исходники, посмотрим. Может, у кого-то какие-то идеи появятся, как улучшить алгоритм.

На мой взгляд, читать чужие исходники и, соответственно, выкладывать свои нужно в крайнем случае. Лучше я дам описание этого алгоритма, словесное с необходимыми рисунками. Но я разрабатывал программу по мере её написания, так что на чистовое описание алгоритма понадобится ещё некоторое время.

Марбол

Возможно, это неотчётливо видно, но к ключевым символам не относятся только те, что хотя бы раз оказались в программе слева от операции присвоения " = ". Эту операцию следует отличать от операции сравнения "=".

Марбол

Возможно, я непрофессионально выражаюсь, но под "языком" я имел в виду систему формальных правил, по которым следует писать нужную программу в виде текста, а под "интерпретатором" - систему программ, обеспечивающую пошаговое выполнение этой программы (как таковой или в преобразованном виде), без предварительного составления исполняемого двоичного файла.

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр