|
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
|
|
| 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 Интерпретатор выражений с переменной(разбор и анализ строки)) Написать парсер математических выражений с функцией упрощения этих выражений Синтаксический анализатор Синтаксический редактор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|