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

Синтаксический анализ выражений

09.01.2012, 14:02. Показов 3014. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

У меня в текстовом файле есть 3 выражения
PRICE = 5
TAX = PRICE * 1e-02
COST = PRICE + TAX
Выражение анализирует нормально.
Вот, Как можно взять значения выражения PRICE и TAX? И подставить в выражение COST = 5 + 0.05.

Я использую массив строки.
Как реализовать повторность через map?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.01.2012, 14:02
Ответы с готовыми решениями:

Синтаксический анализ
Много кто берётся но мало кто доводит до конца эту тему... Я написал класс Expression смысл которого сводится к тому, чтобы вычислить...

Лексический и синтаксический анализ текста
Доброго времени суток, товарищи.Сейчас учусь в универе и дали задание курсовой работы на с++.Я читаю его и понятия не имею что нужно...

Лексический и синтаксический анализ текста
Доброго времени суток, нужно написать курсач по программированию - реализовать алгоритм лексического анализа предложений -...

14
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
09.01.2012, 14:17
mario[x], вас какая сторона вопроса интересует? Теоретическая или практическая? Если теоретическая - то тут нужна таблица идентификаторов. Если практическая, то таблицу это можно реализовать самыми разными способами - от массива структур до хэш-таблицы идентификаторов.
0
4 / 4 / 0
Регистрация: 11.06.2011
Сообщений: 43
09.01.2012, 14:41  [ТС]
в сторону практики.
PRICE = 5 разобрал выражение
TAX = PRICE * 1e-02 вот здесь как брать пред. значение PRICE?
Выражение храню в массиве строки, и там ж перебираю, т.е. PRICE, "=", 5.
PRICE в Variable, "=" в alpha, 5 в constant.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
09.01.2012, 14:42
mario[x], вы сохраняете PRICE как переменную со значением 5 в какой-нибудь таблице идентификаторов?
0
4 / 4 / 0
Регистрация: 11.06.2011
Сообщений: 43
09.01.2012, 15:08  [ТС]
ну да, в таблицу имен.
Пример выражения в входном файле input.txt

PRICE = 5
TAX = PRICE * 1e-02
COST = PRICE + TAX

Выходной файл output.txt
===========
Таблица имен

ID Variable
0 PRICE

Неоптимизированный код

LOAD =5
STORE PRICE

===========
Таблица имен

ID Variable
0 PRICE
1 TAX

Неоптимизированный код

LOAD =0.01
STORE $1
LOAD PRICE
MPY $1
STORE TAX

===========
Таблица имен

ID Variable
0 PRICE
1 TAX
2 COST

Неоптимизированный код

LOAD =0.98
STORE $2
LOAD TAX
STORE $1
LOAD PRICE
ADD $1
MPY $2
STORE COST
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
09.01.2012, 15:12
mario[x], ну вот, при встрече идентификатора идём в таблицу, ищем там этот идентификатор, если находим - берём его значение из таблицы и используем вместо идентификатора в выражении. Если не находим - очевидно, ошибка.
0
4 / 4 / 0
Регистрация: 11.06.2011
Сообщений: 43
09.01.2012, 15:18  [ТС]
Походу понял, надо брать значение с идентификатора?
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
09.01.2012, 15:22
mario[x], разумеется, не из воздуха же. Встречаем идентификатор -> запрашиваем у таблицы информацию о нём -> берём значение из предоставленных данных -> пользуемся значением вместо имени. Надо ещё не забывать обновлять значение, например, при присваивании.
0
4 / 4 / 0
Регистрация: 11.06.2011
Сообщений: 43
09.01.2012, 15:43  [ТС]
Вот например,
PRICE = 5
TAX = PRICE * 1e-02.
В этом случае как получить значение 0.05. Т.е. TAX= 0.05. Я как бы щас разбираю выражение, без вычисления.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
09.01.2012, 15:44
Стоп. Вы разбираете выражение без вычисления, но хотите всё-таки вычислить какое-то значение? Вы уж разберитесь, чего хотите.
0
4 / 4 / 0
Регистрация: 11.06.2011
Сообщений: 43
09.01.2012, 15:47  [ТС]
Ну т.е. в COST уже измененное значение TAX говорю.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
09.01.2012, 15:49
Давайте для начала определимся, вы пишите компилятор или интерпретатор? Если интерпретатор, то действуйте так, как я уже говорил, в таблице идентификаторов храните пару (в простейшем случае) имя-значение. При встрече имени заменяете его соответствующим значением из таблицы.
Ну а если пишется компилятор - то там всё совсем иначе, там уже никаких таблиц нет и в помине, вы напрямую должны оперировать константами и адресами.
0
4 / 4 / 0
Регистрация: 11.06.2011
Сообщений: 43
09.01.2012, 15:56  [ТС]
вообще то интерпретатор...
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
09.01.2012, 15:59
mario[x], ну и всё, какие проблемы-то? Храним в таблице структуры (в простейшем случае):
C++
1
2
3
4
5
struct Identifier
{
    std::string name;
    double value;
};
При этом таблицей (поскольку код учебный) может быть элементарно массив или список. Видим идентификатор - ищем в таблице запись с полем name, соответствующим искомому идентификатору. Нашли - заменяем идентификатор на поле value найденной записи.
0
4 / 4 / 0
Регистрация: 11.06.2011
Сообщений: 43
14.01.2012, 16:04  [ТС]
ну что сказать,
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.01.2012, 16:04
Помогаю со студенческими работами здесь

Синтаксический и семантический анализ во Flex и Bison
Здравствуйте) помогите пожалуйста написать анализ на C++ чтобы потом перевести его во Flex и Bison. Я без понятия что там надо делать....

Интерпретатор выражений с переменной(разбор и анализ строки))
Может у кого есть библиотечка по данному сабжу? В идеале надо чтобы пользователь мог вводить любую функцию y=f(x) и для любого значения...

Написать парсер математических выражений с функцией упрощения этих выражений
Люди, здравствуйте. Есть такая задача: написать упроститель выражений. На вход подается строка вида "a*b+a*c", являющаяся...

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

Синтаксический редактор
Здравствуйте пишу с просьбой помочь в реализации программки на С или С++ быть может кто либо уже делал подобное вобщем нужно...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru