Форум программистов, компьютерный форум CyberForum.ru

Программа - калькулятор бинарных функций - C++

Восстановить пароль Регистрация
 
layer1632
0 / 0 / 0
Регистрация: 21.12.2013
Сообщений: 5
21.12.2013, 00:52     Программа - калькулятор бинарных функций #1
Нужно написать калькулятор бинарных
Кликните здесь для просмотра всего текста
функций по вводимой к примеру строке A NOT B XOR C NAND D строил таблицу различных значений переменных A B C D и для каждой комбинации "0 0 1 0" или "0 1 0 0" вычислял свое значение выражения.
Теперь конкретные вопросы - Как сделать так что бы калькулятор понимал где знак действия и где переменная и как функционально реализовать действия?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,919
Записей в блоге: 1
21.12.2013, 05:10     Программа - калькулятор бинарных функций #2
Цитата Сообщение от layer1632 Посмотреть сообщение
где знак действия и где переменная
'NOT', 'XOR' etc. объявляются зарезервированными словами и распознаются в качестве таковых лексическим анализатором.

В вашем простейшем случае (бинарные операторы), оператор всегда "зажат" между двумя операндами, так что достаточно только проверки на то, что ни два операнда, ни две переменные не идут подряд, а для распознания операнда достаточно массива ключевых слов (a la SymbolTable).

Вот здесь есть вся теория: Теория программирования. Парсеры и парсер-генераторы
layer1632
0 / 0 / 0
Регистрация: 21.12.2013
Сообщений: 5
21.12.2013, 08:02  [ТС]     Программа - калькулятор бинарных функций #3
Цитата Сообщение от gazlan Посмотреть сообщение
'NOT', 'XOR' etc. объявляются зарезервированными словами и распознаются в качестве таковых лексическим анализатором.

В вашем простейшем случае (бинарные операторы), оператор всегда "зажат" между двумя операндами, так что достаточно только проверки на то, что ни два операнда, ни две переменные не идут подряд, а для распознания операнда достаточно массива ключевых слов (a la SymbolTable).

Вот здесь есть вся теория: Теория программирования. Парсеры и парсер-генераторы
Я нашел парсер для символьного массива, покажите пожалуйста на его примере где вводятся данные, что именно он анализирует и какое значение возвращает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
void Parse(char *S)
{
    int l=strlen(S),i,j,p;
    char Tmp[100],sym;
 
    for (j=0; j<100; j++) Tmp[j]=0; p=0;
 
    for (i=0; i<l; i++)
    {
        sym=*(S+i);
        switch (sym)
        { 
        case '*':
            {
                cout << Tmp << endl;
                for (j=0; j<100; j++) Tmp[j]=0; p=0;
                cout << "*" << endl;
                break;
            }
        case '+':
            {
                cout << Tmp << endl;
                for (j=0; j<100; j++) Tmp[j]=0; p=0; 
                cout << "+" << endl;
                break;
            }
        case '-':
            {
                cout << Tmp << endl;
                for (j=0; j<100; j++) Tmp[j]=0; p=0;
                cout << "-" << endl;
                break;
            }
        case '//':
            {
                cout << Tmp << endl;
                for (j=0; j<100; j++) Tmp[j]=0; p=0;
                cout << "//" << endl;
                break;
            }
        case '(':
            {
                cout << Tmp << endl;
                for (j=0; j<100; j++) Tmp[j]=0; p=0;
                cout << "(" << endl;
                break;
            }
        case ')':
            {
                cout << Tmp << endl;
                for (j=0; j<100; j++) Tmp[j]=0; p=0;
                cout << ")" << endl;
                break;
            }
        default:
            {
                Tmp[p++]=sym;
            }
        }
    }
 
    if (strlen(Tmp) > 0) cout << Tmp << endl;
 
}
 
int main(int argc, char* argv[])
{
    Parse("(ax+dy)/(qwe-6.78*jjj)");
 
    return 0;
}
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
21.12.2013, 09:40     Программа - калькулятор бинарных функций #4
layer1632, несколько лет тому назад на форуме была поднята тема с детальным разбором этого вопроса.
layer1632
0 / 0 / 0
Регистрация: 21.12.2013
Сообщений: 5
21.12.2013, 11:42  [ТС]     Программа - калькулятор бинарных функций #5
Цитата Сообщение от outoftime Посмотреть сообщение
layer1632, несколько лет тому назад на форуме была поднята тема с детальным разбором этого вопроса.
Ну как видите я на форуме новенький и перед тем как создать тему я прошелся поиском по основным словам, мой поиск результатов не дал. Может хоть примерно подскажите как тема называлась?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
21.12.2013, 11:49     Программа - калькулятор бинарных функций #6
Тема называется "Пишем свой интерпретатор" или около того.

Добавлено через 3 минуты
Это немного больше чем калькулятор, но зато даст базовое понимание. Пишем свой интерпретатор языка BASIC

Кроме того, если брать только калькулятор ищите "обратная польская нотация" на вики или где-угодно.

Добавлено через 30 секунд
Да, результаты поиска довольно занятные: http://www.cyberforum.ru/search.php?searchid=6967602
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2013, 16:22     Программа - калькулятор бинарных функций
Еще ссылки по теме:

Запись и чтение бинарных файлов. Программа крашится при закрытии консольного окна C++
C++ Почему так(комбинации бинарных и не бинарных вводов и выводов)?
C++ Введение функций в программу(калькулятор)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,919
Записей в блоге: 1
21.12.2013, 16:22     Программа - калькулятор бинарных функций #7
Цитата Сообщение от layer1632 Посмотреть сообщение
Я нашел парсер для символьного массива
И какой вам толк от него?

Сделайте, сначала, лексический разбор вашего потока: читаете строку лексем, разделенных пробелом (судя по вашему примеру, т.к. задание вы не выложили). Каждая лексема это либо переменная (односимвольная?), либо бинарный оператор (многосимвольный). Оператор проверяете по таблице - это либо зарезервированное слово, либо ошибка.

По введенным лексемам строится дерево разбора (само вычисляемое выражение в бесскобочной записи).

Задаетесь значениями переменных и вычисляете.

Наверняка, какие-то методические указания к работе вам выдали - перечитайте их. Посмотрите литературу по ссылке. Действуйте последовательно и не тратьте время на поиски ненужных вам вещей.

Пока у вас нет лексического разбора (и понимания, для чего он нужен), остальное бессысленно.
Yandex
Объявления
21.12.2013, 16:22     Программа - калькулятор бинарных функций
Ответ Создать тему
Опции темы

Текущее время: 00:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru