![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 | |
Форумчанин
Регистрация: 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
|
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Ну ты мое решение знаешь
![]() 1. Не обрабатывать функции - то есть ты заталкиваешь в стек функцию целиком с параметрами, а уж функция по извлечению значений из указанного источника сама заботится о параметрах твоей функции. Ты можешь анализировать в моих исходниках Atomic.Calc, Atomic.GetNumeric и Atomic.OpPlus2. Там конечно не польская нотация, но попробуй в комбинации. 2. Считать все параметрами функции до корректно завершающей скобки. Я рекомендую первый вариант. И не пользоваться польской нотацией при анализе сложных выражений. Ну ты понял ![]()
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() Последний раз редактировалось Utkin; 29.09.2009 в 16:24. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 08.10.2008
Сообщений: 668
|
![]()
Utkin Да.
Однако если для какой ни какой промежуточной компиляции, это должно работать мне кажется быстрее, чем постоянный парсинг. //Я говорю именно о компиляции, а не интерпретации. -------- Я думаю отступить слегка и написать после всех вошедших a b c cnt func Однако это как с IExplorer там чуть чуть, там чуть чуть ![]() ------- //Надо всё же посмотреть. Боюсьц чужих исходников как собака палку ![]()
Don't worry be happy
Последний раз редактировалось Izhic; 29.09.2009 в 16:49. |
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#5 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
![]()
Какая-то еврейская нотация. Ужас
![]()
пыщь
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
А ты не бойся, сделай резервную копию и вперед. Кстати, там комментарий к каждой функции и практически к каждой строчке. Ставь бреакпоинты и отслеживай изменение и всего делов. Также можно подсмотреть еще в каком-нибудь открытом проекте. Ну в Питоне посмотри, но там код уже подточен, разбираться будет сложней.
Цитата:
![]()
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() Последний раз редактировалось Utkin; 30.09.2009 в 08:26. |
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 16.12.2006
Сообщений: 859
|
![]()
можно намного проще. сделать стек, засовывать все цифры туда. при вызове функции, (она-то знает сколько должна принимать параметров) вытаскивать нужное количество.
это самый стандартный способ и никакие это не грабли. |
![]() |
![]() |
![]() |
#8 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
![]() Кроме того, обратная польская нотация также стек, но уже в явном виде и у ТС как раз проблемы. И заключаются они в том, чтобы определить где собственно выражение, а где параметры функции? Пример: х+sin(x+y)*2 Ну позапихаешь ты цифры в стек и чего далее? Когда должен быть вызван синус? Одно дело математические операции - их число заранее известно и совсем другое дело функции, которые помимо огромного ряда существующих может понапихать еще большую кучу и сам программист. И ладно бы если бы у него был бы чистый интерпретатор, но ему нужна промежуточная компиляция (а возможно и полная) и здесь вообще полный задний проход (а возможно и сразу два).
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 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. |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Можно, но внутри функций часто встречаются выражения и вызовы других функций
![]()
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обратная польская нотация | 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 |