|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.12.2010, 08:32 | #1 |
Форумчанин
Регистрация: 10.09.2009
Сообщений: 352
|
Обработка унарного минуса при трансляции языка
Не подскажите, как это лучше сделать?
Ахо и Ульман говорять только, что для синтаксического анализатора это сложная задача, поэтому в Fortran'е она была вынесена в лексический. Но для этого нужно хранить предыдущий токен, значит структура лексического анализатора будет весить больше, и вообще по-моему это ИЗВРАЩЕНИЕ =( Как это делают в наши дни? Последний раз редактировалось anyx; 10.12.2010 в 07:55. |
09.12.2010, 08:33 | #2 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
По-разному, но в основном большинство прислушиваются к мнению академиков, ибо авторитет. Я преобразовывал -а в 0-а .
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
09.12.2010, 08:35 | #3 |
Форумчанин
Регистрация: 10.09.2009
Сообщений: 352
|
|
09.12.2010, 08:37 | #4 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
09.12.2010, 08:40 | #5 |
Форумчанин
Регистрация: 10.09.2009
Сообщений: 352
|
|
09.12.2010, 08:41 | #6 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Ну пусть так. Смысл идеи думаю тебе ясен.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
10.12.2010, 07:30 | #7 |
Форумчанин
Регистрация: 10.09.2009
Сообщений: 352
|
Только сейчас понял - это не прокатит. Приоритет унарного минуса больше, чем у степени ("**"). Т.е. "-5 ** 3" => "(-5) ** 3", а не в "- (5 ** 3)". А этот способ даёт "-5 ** 3" => "+ 0 - 5 ** 3" => "+ 0 - (5 ** 3)". Есть идеи?
|
10.12.2010, 08:19 | #8 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Да.
-5**3 --> (0-5)**3 -5/6 --> (0-5)/6 Не знаю как у Вас, а у меня шла автозамена -5 чуть позже в момент получения действительного значения числа...
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
10.12.2010, 08:25 | #9 | |||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Цитата:
В книжках советуют первым делом все унарные минусы заменить на символ типа тильды, т.е. из такого: Цитата:
Цитата:
В синтаксическом анализаторе этой штуке делать нечего, ибо там оно действительно будет сложно. А как лучше в лексический поместить - тут всё зависит от организации самого лексического анализатора. |
|||
10.12.2010, 08:33 | #10 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Ну в общем да, он его не там увидел -х-5 --> (0-x)-5 . Тогда не будет коллизий и при -х +-5 и при -х--5, что между прочим логично, но на современных парсерах обычно вызывает ошибку...
Зы. С тильдой тоже интересно, но у меня была засада - я допускал в идентифкаторах все спецзнаки, которые не используются для обозначений операций и разделителей, а в ряде случаев (когда ситуация позволяла) допускал и их использование.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 10.12.2010 в 10:15. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать переключение языка ввода при попадании в определенное поле | smoky | Microsoft Office Access | 6 | 15.09.2017 07:59 |
Вставка трансляции | bsanchezb | HTML и CSS | 0 | 11.06.2009 22:57 |
Захват и запись видео трансляции из интернета | polco | Софт | 1 | 02.02.2009 13:58 |