Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2009, 16:16   #1
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию Обратная польская нотация

Размышляю каким боком вписываются функции
wiki

С прочим разобрался.

Написан пункт:
Цитата:
  • Если символ является разделителем аргументов функции (то есть, запятая):
До тех пор, пока верхним элементом стека не станет открывающаяся скобка, выталкиваем элементы из стека в выходную строку. Если открывающаяся скобка не встретилась, это означает, что в выражении либо неверно поставлен разделитель, либо несогласованы скобки.
Однако у меня в голове плохо укладывается....
Откуда я узнаю сколько переменных в функции при дешифровке?

Пример:
1+sqr_sum(4,2,6)+5*8
Вроде так:
1 4 2 6 sqr_sum + 5 8 * +

Вопрос:

Откуда я знаю что в функцию входит
6 или 2 6 ,или 4, 2, 6 а может 1 4 2 6

Может у меня Overload функция

Получается что надо писать количество входящих в фунцию чисел.
Однако спецификация это не предусматривает....
Don't worry be happy
Izhic вне форума Ответить с цитированием
Старый 29.09.2009, 16:20   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну ты мое решение знаешь , кстати, я тебе уже писал про эти грабли. Есть два варианта:
1. Не обрабатывать функции - то есть ты заталкиваешь в стек функцию целиком с параметрами, а уж функция по извлечению значений из указанного источника сама заботится о параметрах твоей функции. Ты можешь анализировать в моих исходниках Atomic.Calc, Atomic.GetNumeric и Atomic.OpPlus2. Там конечно не польская нотация, но попробуй в комбинации.
2. Считать все параметрами функции до корректно завершающей скобки.
Я рекомендую первый вариант. И не пользоваться польской нотацией при анализе сложных выражений. Ну ты понял .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 29.09.2009 в 16:24.
Utkin вне форума Ответить с цитированием
Старый 29.09.2009, 16:24   #3
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

Utkin Да.
Однако если для какой ни какой промежуточной компиляции,
это должно работать мне кажется быстрее, чем постоянный парсинг.
//Я говорю именно о компиляции, а не интерпретации.
--------
Я думаю отступить слегка и
написать после всех вошедших a b c cnt func
Однако это как с IExplorer там чуть чуть, там чуть чуть
-------
//Надо всё же посмотреть. Боюсьц чужих исходников как собака палку
Don't worry be happy

Последний раз редактировалось Izhic; 29.09.2009 в 16:49.
Izhic вне форума Ответить с цитированием
Старый 29.09.2009, 16:26   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Izhic Посмотреть сообщение
Utkin Да.
Однако если для какой ни какой промежуточной компиляции,
это должно работать мне кажется быстрее, чем постоянный парсинг.
//Я говорю именно о компиляции, а не интерпретации.
--------
Я думаю отступить слегка и
написать после всех вошедших a b c len func
Однако это как с IExplorer там чуть чуть, там чуть чуть
А это перпендикулярно, интерпретатор - компилятор, разницы у них практически никакой. Считай функцию как операцию в скобках и всего делов.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 29.09.2009, 16:42   #5
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Какая-то еврейская нотация. Ужас
пыщь
JTG вне форума Ответить с цитированием
Старый 30.09.2009, 08:23   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Izhic Посмотреть сообщение
//Надо всё же посмотреть. Боюсьц чужих исходников как собака палку
А ты не бойся, сделай резервную копию и вперед. Кстати, там комментарий к каждой функции и практически к каждой строчке. Ставь бреакпоинты и отслеживай изменение и всего делов. Также можно подсмотреть еще в каком-нибудь открытом проекте. Ну в Питоне посмотри, но там код уже подточен, разбираться будет сложней.

Цитата:
Какая-то еврейская нотация. Ужас
И где Ви таки здесь еврейский нашли? Титаник тоже затонул, а во всем обвинили нашего соседа Айсберга
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 30.09.2009 в 08:26.
Utkin вне форума Ответить с цитированием
Старый 30.09.2009, 18:11   #7
Роман Радер
Форумчанин
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
По умолчанию

можно намного проще. сделать стек, засовывать все цифры туда. при вызове функции, (она-то знает сколько должна принимать параметров) вытаскивать нужное количество.
это самый стандартный способ и никакие это не грабли.
Роман Радер вне форума Ответить с цитированием
Старый 30.09.2009, 18:57   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Роман Радер Посмотреть сообщение
можно намного проще. сделать стек, засовывать все цифры туда. при вызове функции, (она-то знает сколько должна принимать параметров) вытаскивать нужное количество.
это самый стандартный способ и никакие это не грабли.
Круто . А если я ошибся и указал для функции больше параметров чем требуется? А если она перегружена и воспринимает и 3 и 2 и 4 параметра? Не все так просто как хотелось бы. А если она виртуальная? А ТС хочет некоторого аналога Делфи, возможно не полного, не суть важно. Более того я уже предложил ему рекурсию, что по сути и является стеком, но организация данных на более высоком уровне.
Кроме того, обратная польская нотация также стек, но уже в явном виде и у ТС как раз проблемы. И заключаются они в том, чтобы определить где собственно выражение, а где параметры функции?
Пример:
х+sin(x+y)*2
Ну позапихаешь ты цифры в стек и чего далее? Когда должен быть вызван синус? Одно дело математические операции - их число заранее известно и совсем другое дело функции, которые помимо огромного ряда существующих может понапихать еще большую кучу и сам программист.
И ладно бы если бы у него был бы чистый интерпретатор, но ему нужна промежуточная компиляция (а возможно и полная) и здесь вообще полный задний проход (а возможно и сразу два).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 30.09.2009, 19:14   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

А засунуть элемент, который будет показывать, что дальше идут параметры функции, низя?
1 _ 4 2 6 sqr_sum + 5 8 * +
или перед самой функцией дописать сколько параметров передано?
1 4 2 6 3 sqr_sum + 5 8 * +
Ну и опять же проверку на число элементов можно засунуть в функцию генерации обратной польской записи, т.е. попалась закрывающаяся скобка и смотрим сколько параметров передаётся, если неправильное число, то ошибку пользователю в пол экрана.

Последний раз редактировалось pu4koff; 30.09.2009 в 19:16.
pu4koff вне форума Ответить с цитированием
Старый 30.09.2009, 19:19   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Можно, но внутри функций часто встречаются выражения и вызовы других функций . Так сколько и чего передано?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обратная польская нотация Sexy Fox Помощь студентам 9 22.09.2011 14:57
Польская запись azl-8 Помощь студентам 0 06.05.2009 20:19
Обратная польская запись Катуха Помощь студентам 6 27.12.2008 10:23
Обратная польская запись Роман Радер Общие вопросы Delphi 0 09.12.2008 18:18
Обратная польская нотация Sexy Fox Помощь студентам 2 22.06.2007 13:27