Author Topic: Интерпретаторы и жизнь.  (Read 1656 times)

0 Members and 1 Guest are viewing this topic.

Offline Марбол

  • Blogger
  • *
  • Posts: 2617
  • Gender: Male
« on: November 24, 2013, 23:40 »
Здравствуйте!

Недавно я решил следующую прикладную задачу: написать на 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.

Offline Python

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

Offline Марбол

  • Blogger
  • *
  • Posts: 2617
  • Gender: Male
« Reply #2on: November 25, 2013, 00:19 »
Выкладывайте исходники, посмотрим. Может, у кого-то какие-то идеи появятся, как улучшить алгоритм.

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

« Reply #3on: November 25, 2013, 00:29 »
Возможно, это неотчётливо видно, но к ключевым символам не относятся только те, что хотя бы раз оказались в программе слева от операции присвоения " = ". Эту операцию следует отличать от операции сравнения "=".

« Reply #4on: January 6, 2014, 23:15 »
Возможно, я непрофессионально выражаюсь, но под "языком" я имел в виду систему формальных правил, по которым следует писать нужную программу в виде текста, а под "интерпретатором" - систему программ, обеспечивающую пошаговое выполнение этой программы (как таковой или в преобразованном виде), без предварительного составления исполняемого двоичного файла.

 

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Note: this post will not display until it's been approved by a moderator.
Name: Email:
Verification:
Type the letters shown in the picture
Listen to the letters / Request another image
Type the letters shown in the picture:
√49 Напишите ответ строчными буквами:
«Сто одёжек, все без застёжек» — что это?: