Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 14.04.2022
Сообщений: 16

Анализатор(проверка корректности логического оператора !

17.12.2022, 16:53. Показов 1102. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал пока проверки:
1)В принципе на наличие ! в коде
2)На верное написания !=
3)На верное написания ! перед переменной
Осталось сделать проверку на ! перед переменной и != во время объявления переменной
То есть int !q=5-Невозможная конструкция
Точно также и int w!=6; тоже невозможная конструкция
и я не особо понимаю как сделать эту проверку,тк объявление переменной может быть не обязательно в 1 символ..

Также еще в будущем возникнет проблема с сравнением типов
double!=char-такая запись еще реальна(проверено в VS22),а допустим string!=char уже невозможна..

Можете подсказать как решаются данные проблемы

C++ (Qt)
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include <iostream>
 
#include <fstream>
#include <vector>
#include <string>
using namespace std;
 
 
bool ProverkaNaluch() {
    ofstream fout;//поток для записи
    ifstream fin;
    bool flag = false;
    fin.open("Analizator.txt", ofstream::app);
    if (!fin.is_open()) {
        cout << "Не открылся файл";
    }
    else {
        char ch;//для считывания с файла
        char ch1[256];
        int i_len_mass = 0;
        int count_len = 0;
        while (fin.get(ch)) {//записываем весь код в массив ch1
            ch1[i_len_mass] = ch;
            if (ch == '\n') {
                count_len++;
            }
            i_len_mass++;
        }
 
        for (int i = 0; i < i_len_mass; i++) {
            if (ch1[i] == '!') {
                cout << "В коде есть нужный элемент для проверки '!'\n";
                flag = true;
                break;
            }
        }
    }
    fin.close();
    return flag;
 
 
}
//3 случая расположения !
//1. Сочетание !=
//2. Перед переменной
//3. Несколько раз употребление ! перед переменной
bool ProverkaPlaceLogOperBockRavno(char* FileAnalizator, int i_len_mass) {//надл сделать проверку на невозможное написания !!!=
    bool ProverkaBockRavno = false;
    for (int i = 0; i < i_len_mass; i++) {
        if ((FileAnalizator[i] == '!') && (FileAnalizator[i + 1] == '=')) {
            //случай с употреблением сочетания !=
            ProverkaBockRavno = true;
 
        }
    }
    if (!ProverkaBockRavno) {
        cout << "В программе нет конструкций с !=\n";
    }
    return ProverkaBockRavno;
}
bool ProverkaPlace(char* FileAnalizator, int i_len_mass) {//надо сделать проверку на несколько лог операторов '!!!!!'
    bool ProverkaNaluchofValue = false;
    for (int i = 0; i < i_len_mass; i++) {
        if (((FileAnalizator[i] == '!') || (FileAnalizator[i - 1] == '!' && FileAnalizator[i] == '!')) && (((FileAnalizator[i + 1] >= 'A' && FileAnalizator[i + 1] <= 'Z')) || ((FileAnalizator[i + 1] >= 'a' && FileAnalizator[i + 1] <= 'z')))) {
            ProverkaNaluchofValue = true;
        }
    }
    if (!ProverkaNaluchofValue) {
        cout << "В программе нет конструкций с !__name__\n";
    }
    return ProverkaNaluchofValue;
}
 
 
//констркция выглядит a!=b
 
 
void ProverkaPlaceValiue(char* FileAnalizator, int i_len_mass) {//подробно разбираем конст !=
    bool Pr_bykva = false;
    bool Pr_value = false;
    for (int i = 0; i < i_len_mass; i++) {
        if()
        if (FileAnalizator[i] == '!' && FileAnalizator[i + 1] == '=') {
            if ((FileAnalizator[i - 1] >= 'A' && FileAnalizator[i - 1] <= 'Z') || (FileAnalizator[i - 1] >= 'a' && FileAnalizator[i - 1] <= 'z')) {
                if ((FileAnalizator[i + 2] >= 'A' && FileAnalizator[i + 2] <= 'Z') || (FileAnalizator[i + 2] >= 'a' && FileAnalizator[i+2] <= 'z')){
                    Pr_bykva = true;
                }
                else if ((FileAnalizator[i + 2] >= '1' && FileAnalizator[i + 2] <= '9')) {
                        Pr_value = true;
                }
                else {
                    cout << "Невозможная конструкция\n";
                }
            }
            else {
                cout << "Невозможная конструкция\n";
            }
        }
    }//теперь идет полная проверка на конструкцию !=    ->((__name__!=name))//без типов не будет в принципе работать 
}
 
 
void ProverkaPlaceValue(char* FileAnalizator, int i_len_mass) {
    bool Pr_Place = false;
    for (int i = 0; i < i_len_mass; i++) {
        if (FileAnalizator[i] == '!') {
            if ((FileAnalizator[i + 1] >= 'A' && FileAnalizator[i + 1] <= 'Z') || (FileAnalizator[i + 1] >= 'a' && FileAnalizator[i + 1] <= 'z')) {
                Pr_Place = true;
                
            }
            else {
                cout << "Невозможная конструкция\n";
            }
        }
    }
}
 
 
//Сначала должна быть проверка на верное расположение логического оператора
//При проверке в коде,лог оператор может употребляться перед именем переменной,но самое
//главное,что это было не в момент объявления
 
//То есть простая надпись !q без всего-никаких ошибок не допусткает
//Также употребляется после переменной,но с условием,что после ! должен быть =
//Несколько подряд !!!! может быть
 
int main() {
    setlocale(LC_ALL, "rus");
    bool flag = false;
    flag = ProverkaNaluch();
    if (flag) {
        ifstream fin;
        fin.open("Analizator.txt", ofstream::app);
        char ch;//для считывания с файла
        char FileAnalizator[256];
        int i_len_mass = 0;
        int count_len = 0;
        while (fin.get(ch)) {//записываем весь код в массив ch1
            FileAnalizator[i_len_mass] = ch;
            if (ch == '\n') {
                count_len++;//количество строк
            }
            i_len_mass++;//количество символов
        }
        bool ProverkaBockRavno;
        bool ProverkaNaluchofValue;
 
        //Сначала проверим на корректность написания !
        ProverkaBockRavno = ProverkaPlaceLogOperBockRavno(FileAnalizator, i_len_mass);
        ProverkaNaluchofValue = ProverkaPlace(FileAnalizator, i_len_mass);
 
        //Если оба будут false,то есть 3 возможных исхода 
        //Неверное местоположение !,либо '!' стоит во время объявления переменной
        //int !b!=123;-такой случай пройдет тест
        if (ProverkaBockRavno) {
            ProverkaPlaceValiue(FileAnalizator, i_len_mass);
 
 
 
        }
        if (ProverkaNaluchofValue) {
            //тут будет проверка на правильное местопопложение !
            ProverkaPlaceValue(FileAnalizator,i_len_mass);
 
 
        }
        //также добавить проверку на ! во время инициализации 
        cout << "";
    }
    else {
        cout << "Нет в коде нужного логического оператора.";
    }
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2022, 16:53
Ответы с готовыми решениями:

Проверка корректности записи логического выражения и выдача результата
В файле дана запись логического выражения, содержащего скобки, AND,NOT,OR, логические переменные (односимвольные имена), константы TRUE и...

Синтаксический анализатор логического выражения
Создать синтаксический анализатор логического выражения, состоящего из операндов,представленных числами и идентификаторами, объединённые...

Создать синтаксический анализатор логического выражения
Создать синтаксический анализатор логического выражения, состоящего из операндов, представленных числами и идентификаторами, объединенными...

1
0 / 0 / 0
Регистрация: 14.04.2022
Сообщений: 16
18.12.2022, 20:53  [ТС]
Мне нужно проверить корректность программы с файла
Вот,что хранится в файле
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
using namespace std;
int main() {
    char a = ' ';
    int wffb = 1456;
    int rr = 678;
    string q = "ww";
    string e = "wwwwww";
    string m;
    q != wffb;
    e != a;
 
    int z = 678;
    !a;
}
То есть моя программа должна выдать ошибки в строках -
q != wffb;
e != a;
Тк нельзя сравнивать char и string,и int и string
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2022, 20:53
Помогаю со студенческими работами здесь

Использование логического оператора
В базе Склад есть таблицы Прибор (код прибора, наименование, код места) и Место хранения (код места хранения, занято или свободно...

Ошибка при использовании логического оператора
#include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;locale.h&gt; int main() { setlocale(LC_ALL,&quot;Russian&quot;); int...

Записать с помощью тернарного логического оператора
Как этот кусок кода можно переделать с if else на ?: if (textBox3.Text == &quot;+&quot;) //plus ...

Лексический анализатор с использованием оператора switch
Здравствуйте! Подскажите, пожалуйста, в чем проблема. По заданию мне надо запрогать небольшой лексический анализатор при помощи...

Анализатор для грамматики оператора цикла while/repeat
реализовать анализатор для грамматики оператора цикла while/repeat С#


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru