![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Форумчанин
Регистрация: 10.09.2009
Сообщений: 352
|
![]()
Вы меня не поняли. Под "- x) - 5" я имел в виду что-нибудь вроде "(3 - x) - 5", т.е. то было просто конец выражения в скобке.
У меня интерпретатор. Можно использовать вычитание из нуля без потери эффективности. Да и при компиляции можно было бы потом оптимизировать. |
![]() |
![]() |
![]() |
#12 |
Форумчанин
Регистрация: 10.09.2009
Сообщений: 352
|
![]() |
![]() |
![]() |
![]() |
#13 | ||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
Смысл примерно в следующем - система разбирает вложенные выражения вида: операнд1 операция операнд2. Для данного выражения: 1) (3-х)-5 2) 5 ->5 3) 3-x 4) 3 -> 3 5) х -> текущее значение переменной х 6) возвращемся к пункту 3) 3-х -> вычисленное значение выражения 7) вернемся к пункту 1) (3-х)-5 -> вычисленное значение выражения Примерно как-то так. И ежу понятно, что рекурсия здесь очень выгодна, да ![]() Цитата:
ЗЫ. Не знаю как у тебя там все замучено - но если интерпретатор, то разбор выражения (если конечно он не состоит исключительно из констант, то есть не выражение которое можно вычислить сразу) можно осуществлять на этапе исполнения, а при разборе ограничиться только поверкой корректности выражения - ну так знаки чтобы как положено, скобки путем были и т.д.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() Последний раз редактировалось Utkin; 10.12.2010 в 13:35. |
||
![]() |
![]() |
![]() |
#14 |
Форумчанин
Регистрация: 10.09.2009
Сообщений: 352
|
![]()
Опять же, надо хранить предыдущий токен. Видимо, другого способа нет?
Если хранить токен, то дальше мне всё понятно. Просто надеялся, что можно по другому. |
![]() |
![]() |
![]() |
#15 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Чем у тебя представлены токены? Не обязательно хранить предыдущий, можно хранить информацию о том, что предыдущий токен удовлетворяет определенному условию...
Покажи структуру данных которую ты используешь для токенов...
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
![]() |
![]() |
![]() |
#16 |
Форумчанин
Регистрация: 10.09.2009
Сообщений: 352
|
![]() Код:
Поле int token - это тип токена, например, TOK_SUB или TOK_ASSIGN_PLUS. Поле char *value хранит значение, если токен - литерал Можно добавить поле int last_token в struct FzLexer (состояние анализатора) P.S. Ненавижу кнопку "Правка"! Последний раз редактировалось anyx; 10.12.2010 в 14:18. |
![]() |
![]() |
![]() |
#17 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Я плакал, 4-е байта жалко
![]() Цитата:
а) Что такое унарный минус б) Двойные стандарты - Вы предполагаете что работать будет так-то и так и при этом в одном примере игнорируете порядок операции, а вдругом нет. в) Не видите разницы между операцией с одним операндом (входящим параметром) и операцией с двумя операндами. г) Все математические выражения используемые, например, в Дельфи (но не С++, ибо там еще и логические примешиваются) включая вызов функций можно свести к цикличному либо рекурсивному вызову системы разбора выражений вида операнд1 операция операнд2. При этом разбивать на токены математические выражения для интерпретатора совершенно не обязательно. Вместо токенов можно использовать текущие, мгновенные значения операндов. По пункту г) могу сказать что такая модель мною была реализована и при необходимости могу сбросить свой недоделанный интерпретатор (но разбор выражений там реализован, включая вызов функций).
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() Последний раз редактировалось Utkin; 10.12.2010 в 15:22. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать переключение языка ввода при попадании в определенное поле | smoky | Microsoft Office Access | 6 | 15.09.2017 07:59 |
Вставка трансляции | bsanchezb | HTML и CSS | 0 | 11.06.2009 22:57 |
Захват и запись видео трансляции из интернета | polco | Софт | 1 | 02.02.2009 13:58 |