|
4 / 4 / 0
Регистрация: 11.06.2011
Сообщений: 43
|
|
Синтаксический анализ выражений09.01.2012, 14:02. Показов 3058. Ответов 14
Метки нет (Все метки)
Здравствуйте.
У меня в текстовом файле есть 3 выражения PRICE = 5 TAX = PRICE * 1e-02 COST = PRICE + TAX Выражение анализирует нормально. Вот, Как можно взять значения выражения PRICE и TAX? И подставить в выражение COST = 5 + 0.05. Я использую массив строки. Как реализовать повторность через map?
0
|
|
| 09.01.2012, 14:02 | |
|
Ответы с готовыми решениями:
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], ну и всё, какие проблемы-то? Храним в таблице структуры (в простейшем случае):
0
|
||||||
|
4 / 4 / 0
Регистрация: 11.06.2011
Сообщений: 43
|
|
| 14.01.2012, 16:04 [ТС] | |
|
ну что сказать,
Спасибо!
0
|
|
| 14.01.2012, 16:04 | |
|
Помогаю со студенческими работами здесь
15
Синтаксический и семантический анализ во Flex и Bison Интерпретатор выражений с переменной(разбор и анализ строки)) Написать парсер математических выражений с функцией упрощения этих выражений Синтаксический анализатор Синтаксический редактор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программная установка даты и запрет ее изменения
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
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|