Страница: 1 |
Страница: 1 |
Вопрос: Обработка логических выражений
Добавлено: 05.04.08 20:05
Автор вопроса: VoVaN | ICQ: 4921085
Люди, помогите пожалуйста, с такой вещью: Я ввожу в текстбокс что-то типа "True and False and (false or true) and true". В общем, сложное логическое выражение. Может, у кого-то есть пример его обработки, чтобы получить конечный результат в виде булевского значения?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 06.04.08 00:57
Польская инверсная запись
Номер ответа: 2
Автор ответа:
VoVaN
ICQ: 4921085
Вопросов: 27
Ответов: 38
Профиль | | #2
Добавлено: 06.04.08 12:14
А можно поподробнее?
Номер ответа: 3
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #3
Добавлено: 06.04.08 21:17
Гугл.
Номер ответа: 4
Автор ответа:
VoVaN
ICQ: 4921085
Вопросов: 27
Ответов: 38
Профиль | | #4
Добавлено: 07.04.08 00:13
млин... что это такое, я в курсе. Мне бы реализацию... ниче не могу найти/придумать
Номер ответа: 5
Автор ответа:
VoVaN
ICQ: 4921085
Вопросов: 27
Ответов: 38
Профиль | | #5
Добавлено: 07.04.08 00:13
млин... что это такое, я в курсе. Мне бы реализацию... ниче не могу найти/придумать
В любом случае за идею спасибо
Номер ответа: 6
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #6
Добавлено: 07.04.08 00:31
четай про лексический анализатор. строй дерево выражений. или на стеке реализовывай. если бы не скобки, то можно линейно идти. а так сначала нада построить порядок вычислений, а потом уже высчитывать. ваще задачка весьма проста, лексемм всего ничего. отличная задача для проверки ума - сам не сможешь решить, значит не стоит кодить :p
Номер ответа: 7
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #7
Добавлено: 07.04.08 15:53
замени в строке все true на 1, false - 0, and - *, or - +. У * приоритет 2, у + - 1, у скобки - 0.
Преобразование из инфиксной формы в постфиксную:
идем по строке
если это операнд, то он передается в выходную строку
если (, то она заносится в стек с приоритетом 0
если это операция, то ее приоритет сравнивается с приоритетом операций в вершине стека. если приоритет выше, то операция заносится в стек, иначе из стека извлекается операция и помещается в выходную строку. процесс сравнения повторяется до тех пор, пока стек не станет пустым или будет найдена операция с более низким приоритетом, после этого текущая операция заносится в стек.
если текущий символ ), то операции из стека последовательно переносятся в выходную строку до тех пор, пока на вершине стека не появится (. эта скобка извлекается из стека и отбрасывается.
если выражение закончилось, то из стека последовательно переносятся в выходную строку все оставшиеся в нем операции.
подсчет выражения:
идем по новой строке
после чтения операнда он записывается в стек
если читается операция, то из стека извлекаются 2 последних операнда, к ним применяется операция и результат записывается в стек.