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

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

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

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

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

 Комментарий модератора 
Не дублируйте темы - это нарушает правила форума.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2011, 13:40
Ответы с готовыми решениями:

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

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

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

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

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

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


Не по теме:

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

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

Не по теме:

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

0
asics
01.03.2011, 16:49
  #14

Не по теме:

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

1
silent_1991
01.03.2011, 16:53
  #15

Не по теме:

asics, мудро! :D

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

kest_wolf, тему пока не закрываю, но всё-таки настоятельно рекомендую хотябы попытаться что-то сделать.
0
0 / 0 / 0
Регистрация: 08.02.2011
Сообщений: 33
01.03.2011, 17:21  [ТС] 17
неужели нет таких кто знает как делать эту програму?? блин. люди! помогите!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
01.03.2011, 17:56 18
Цитата Сообщение от kest_wolf Посмотреть сообщение
неужели нет таких кто знает как делать эту програму?
Из троих последних в этой теме отписавшихся нет ниодного, кто не знает, как её делать. Вы просто разницу между "помочь" и "сделать за кого-то" не улавливаете.
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
02.03.2011, 11:41 19
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
02.03.2011, 11:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2011, 11:41
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru