Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 08.02.2011
Сообщений: 33

Технологии синтаксического анализа и интерпретации команд

01.03.2011, 13:40. Показов 1817. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Составить программу, которая проверяет корректность арифметических выражений, в которых могуть быть скобки трех типов "()", "[]", "{}" и действия "+-*/".

очень нужно срочно. курсач горит у бедного студента

 Комментарий модератора 
Не дублируйте темы - это нарушает правила форума.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2011, 13:40
Ответы с готовыми решениями:

Как называется алгоритм для синтаксического анализа?
Всем добрый вечер :) Ищу, значит, алгоритм, который разбирает математическое выражение на токены, а потом вычисляет. Помню, что там...

Программная реализация алгоритмов лексического и синтаксического анализа
В общем, есть вот такое задание: разработать язык и порождающую грамматику для выбранного варианта задания. Выполнить программную...

Ошибка синтаксического анализа
Здравствуйте! строка $select*=*isset($_GET)*&&*($id*=*(int)$_GET)*?*'WHERE*id='.$id*:*null; выдает ошибку. Parse error: in...

18
 Аватар для dxdy
99 / 99 / 14
Регистрация: 14.06.2010
Сообщений: 284
01.03.2011, 14:11
и в чем же проблема?
0
0 / 0 / 0
Регистрация: 08.02.2011
Сообщений: 33
01.03.2011, 14:13  [ТС]
какой?

Добавлено через 58 секунд
не знаю язык си... совсем не получаеться в нем разобраться и выучиь! а прога надо тоьок на языке СИ!
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
01.03.2011, 15:13
А какой знаете? Можете написать хоть на чём-то или хотя-бы предложить алгоритм (для этого нужен только русский язык, или в нём тоже совсем не получается разобраться и выучить)?
0
0 / 0 / 0
Регистрация: 08.02.2011
Сообщений: 33
01.03.2011, 15:17  [ТС]
ну а смысл от того что я напишу прогу на джава? тебе то что от неё?
мне на сишке надо! и только си. хотя можно и С++
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
01.03.2011, 15:23
kest_wolf, пишите. И выкладывайте.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
01.03.2011, 15:34
Цитата Сообщение от kest_wolf Посмотреть сообщение
ну а смысл от того что я напишу прогу на джава?
Смысл в том, чтобы хотябы алгоритм самому составить. Логика работы программы в общем случае не должна зависеть от языка программирования, скорее даже наоборот. А логика в этом задании не то, чтобы сложная, но требует некоторой кропотливости (проверка открывающих/закрывающих скобок, наличие посторонних символов, etc...) Сделайте хоть на JavaScript, главное, чтобы работало, а на С переделать особой сложности не составит. Даже при условии, что Вы не знаете С, вероятность того, что Вам помогут переделать программу, написанную на другом языке, гораздо выше, чем вероятность, что кто-то будет долго и нудно за Вас парсер строки на С писать.


Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
(для этого нужен только русский язык, или в нём тоже совсем не получается разобраться и выучить)?
Цитата Сообщение от dxdy Посмотреть сообщение
и в чем же проблема?
Цитата Сообщение от kest_wolf Посмотреть сообщение
какой?
;)

1
0 / 0 / 0
Регистрация: 08.02.2011
Сообщений: 33
01.03.2011, 16:17  [ТС]
у меня курсач на завтра. сегодня отчет хоть бы успеть сделать!
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
01.03.2011, 16:31
kest_wolf, всё с вами понятно. Сегодня за вас надо написать курсовой проект, завтра диплом. Потом и работать за вас?
0
0 / 0 / 0
Регистрация: 08.02.2011
Сообщений: 33
01.03.2011, 16:35  [ТС]
диплом я сам делаю. и отчет сам делаю! но прога нужна!
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
01.03.2011, 16:40
Цитата Сообщение от kest_wolf Посмотреть сообщение
отчет сам делаю
[сарказм]Похвально![/сарказм]
2
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
01.03.2011, 16:40
Цитата Сообщение от kest_wolf Посмотреть сообщение
но прога нужна!
Давайте разберемся: Вы хотите что бы зав Вас написали всю програму ? Если да - вам сюда, иначе - Ваши наброски, идеи по созданию програмы.
0
01.03.2011, 16:44

Не по теме:

asics, понимаете, человек знает яву, но так вышло, что он из принципа не хочет писать на ней, а хочет, чтобы мы немного растрясли мозги (а то ведь только и можем что сидеть на форумах и ехидничать) и написали программу с нуля. Ну что тут поделать?

0
01.03.2011, 16:49

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Ну что тут поделать?
Предлагаю забить на это :)

1
01.03.2011, 16:53

Не по теме:

asics, мудро! :D

1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
01.03.2011, 16:55
Цитата Сообщение от asics Посмотреть сообщение
Предлагаю забить на это
Ну во всяком случае давайте флудить перестанем. Найдутся альтруисты - повезло студенту. Не найдутся - не повезло...

kest_wolf, тему пока не закрываю, но всё-таки настоятельно рекомендую хотябы попытаться что-то сделать.
0
0 / 0 / 0
Регистрация: 08.02.2011
Сообщений: 33
01.03.2011, 17:21  [ТС]
неужели нет таких кто знает как делать эту програму?? блин. люди! помогите!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
01.03.2011, 17:56
Цитата Сообщение от kest_wolf Посмотреть сообщение
неужели нет таких кто знает как делать эту програму?
Из троих последних в этой теме отписавшихся нет ниодного, кто не знает, как её делать. Вы просто разницу между "помочь" и "сделать за кого-то" не улавливаете.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
02.03.2011, 11:41
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
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
/////////////////////////////////////////////////////////////////////////////////////////
//Составить программу, которая проверяет корректность арифметических выражений, 
//в которых могуть быть скобки трех типов "()", "[]", "{}" и действия "+-*/".
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cctype>
#include <iostream>
#include <sstream>
#include <stack>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string       T_expr;
typedef std::stack<char>  T_brackets_stack;
typedef int               T_num;
/////////////////////////////////////////////////////////////////////////////////////////
enum
{
    OPEN_ROUND_BRACKET      = '(',    
    CLOSING_ROUND_BRACKET   = ')',    
 
    OPEN_SQUARE_BRACKET     = '[',    
    CLOSING_SQUARE_BRACKET  = ']',    
 
    OPEN_BRACE              = '{',    
    CLOSING_BRACE           = '}'
};
/////////////////////////////////////////////////////////////////////////////////////////
bool  parse_num(T_expr&  e)
{
    std::istringstream  e_stream(e);
    T_num               num = 0;
    if(!(e_stream >> num)) return  false;
    e.clear();
    e_stream >> e;
    return  true;
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  is_open_bracket(char  c)
{ 
    return    c == OPEN_ROUND_BRACKET
           || c == OPEN_SQUARE_BRACKET
           || c == OPEN_BRACE;
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  is_closing_bracket(char  c)
{ 
    return    c == CLOSING_ROUND_BRACKET
           || c == CLOSING_SQUARE_BRACKET
           || c == CLOSING_BRACE;
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  open_bracket_is_correct
    (
        char               open_bracket_symb, 
        T_brackets_stack&  brackets_stack
    )
{    
    switch(open_bracket_symb)
    {
    case OPEN_ROUND_BRACKET:
        if(   brackets_stack.empty()
           || brackets_stack.top() == OPEN_SQUARE_BRACKET
           || brackets_stack.top() == OPEN_BRACE)
        {
            brackets_stack.push(open_bracket_symb);            
            return  true;        
        }
        return  false;
               
    case OPEN_SQUARE_BRACKET:
        if(   brackets_stack.empty()           
           || brackets_stack.top() == OPEN_BRACE)
        {
            brackets_stack.push(open_bracket_symb);            
            return  true;        
        }
        return  false;
 
    case OPEN_BRACE: 
        if( brackets_stack.empty() )
        {
            brackets_stack.push(open_bracket_symb);            
            return  true;        
        }
        return  false;
 
    default:
        return  false;
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  closing_bracket_is_correct
    (
        char               closing_bracket_symb, 
        T_brackets_stack&  brackets_stack
    )
{    
    switch(closing_bracket_symb)
    {
    case CLOSING_ROUND_BRACKET:
        if( brackets_stack.top() == OPEN_ROUND_BRACKET )
        {
            brackets_stack.pop();            
            return  true;        
        }
        return  false;
               
    case CLOSING_SQUARE_BRACKET:
        if( brackets_stack.top() == OPEN_SQUARE_BRACKET )
        {
            brackets_stack.pop();            
            return  true;        
        }
        return  false;
 
    case CLOSING_BRACE: 
        if( brackets_stack.top() == OPEN_BRACE )
        {
            brackets_stack.pop();            
            return  true;        
        }
        return  false;
 
    default:
        return  false;
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  parse_open_brackets_arr_or_nothing
    (
        T_expr&            e, 
        T_brackets_stack&  brackets_stack
    )
{
    while(   !e.empty()
          && is_open_bracket(e[0]))
    {
        if(!open_bracket_is_correct(e[0], brackets_stack)) return  false;
        e.erase(0, 1);
    }
    return  true;
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  parse_closing_brackets_arr_or_nothing
    (
        T_expr&            e, 
        T_brackets_stack&  brackets_stack
    )
{    
    while(   !e.empty()
          && is_closing_bracket(e[0]))
    {
        if(!closing_bracket_is_correct(e[0], brackets_stack)) return  false;
        e.erase(0, 1);
    }
    return  true;
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  parse_num_with_brackets_arr
    (
        T_expr&            e, 
        T_brackets_stack&  brackets_stack
    )
{
    return    parse_open_brackets_arr_or_nothing     (e, brackets_stack)
           && parse_num(e)
           && parse_closing_brackets_arr_or_nothing  (e, brackets_stack);
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  parse_op(T_expr&  e)
{
    if(e.empty())  return  false;    
    switch(e[0])
    {
    case '+':
    case '-':
    case '*':
    case '/':
        e.erase(0, 1);
        return  true; 
 
    default:
        return  false;
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  expr_is_correct(const T_expr&  expr)
{
    T_expr  e;    
    std::remove_copy_if(expr.begin(), expr.end(), 
                        std::back_inserter(e), isspace);
 
    T_brackets_stack  brackets_stack;
    if(!parse_num_with_brackets_arr(e, brackets_stack))  return  false;
    while(!e.empty())
    {
        if(   !parse_op                     (e)
           || !parse_num_with_brackets_arr  (e, brackets_stack))  return  false;        
    }
 
    return  brackets_stack.empty();
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите арифметическое выражение, содержащее целые числа,"
              << std::endl
              << "скобки трех типов \"()\", \"[]\", \"{}\" и действия \"+-*/\":"
              << std::endl;
 
    T_expr  expr;
    getline(std::cin, expr);
    std::cout << "Выражение "
              << (expr_is_correct(expr) ? "" : "НЕ ")
              << "корректно."
              << std::endl;
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.03.2011, 11:41
Помогаю со студенческими работами здесь

Отложение синтаксического анализа JavaScript
как решить траблу?? пробовал через defer=&quot;defer&quot; и async=&quot;async&quot; трабла решается но скрипты не работают

Ошибка синтаксического анализа XML: неопределённая сущность
DTD файл &lt;!ELEMENT contacts (contact*)&gt; &lt;!ATTLIST contacts version CDATA #FIXED &quot;1.0&quot;&gt; &lt;!ATTLIST contacts source CDATA...

Из richtextview текст как-то преобразить для синтаксического анализа
Я открываю текст в richtextview и мне нужно далее этот текст проанализировать синтаксическим анализом. Но как мне и куда его преобразовать...

Ошибка синтаксического анализа XML: корневой элемент не найден
у меня приходит от клиента запрос на удаления пакета id (то есть удаление нескольких записей в базе данных). rest endpoint ...

Подойдет ли Delphi для написания программы синтаксического и семантического анализа форума?
Задали написать программу которая осуществляет синтаксический и семантический анализ форума, т.е. должна анализировать полезность...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru