Какая-либо причина я не мог создать инфикс поддержки языка, постфикс и функции префикса, и больше?

Здесь есть путаница, потому что вы думаете, что x += 1; всегда x = x + 1. Это верно для целых чисел, двойных чисел ... но, как правило, НЕ относится к другим объектам. Многие реализации не создают временный объект. Или мог сделать что-то очень злое.

Итак, это вызов operator+=, который принимает в качестве аргумента результат правой части присваивания.

Так что для целых чисел, это x = x + (y % 3).

5
задан Manishearth 18 January 2013 в 20:24
поделиться

4 ответа

Это не слишком трудно сделать. Вы захотите присвоить каждому оператору неподвижность (инфикс, префикс или постфикс) и приоритет. Сделайте приоритет вещественным числом; Вы будете благодарить меня позже. Операторы более высокого приоритета связывают более плотно, чем операторы более низкого приоритета; на равных уровнях приоритета можно потребовать разрешения неоднозначности с круглыми скобками, но Вы, вероятно, предпочтете разрешать некоторым операторам быть ассоциативными, таким образом, можно будет записать

x + y + z

без круглых скобок. После того как у Вас есть неподвижность, приоритет и ассоциативность для каждого оператора, Вы захотите записать парсер первенства операторов. Этот вид синтаксического анализатора должен справедливо просто записать; это сканирует маркеры слева направо и использует один вспомогательный стек. Существует объяснение в книге дракона, но я никогда не находил это очень ясным, частично потому что книга дракона описывает очень общий случай синтаксического анализа по грамматике предшествования оператора. Но я не думаю, что Вы найдете это трудным.

Другой случай, которого Вы захотите остерегаться, - когда Вы имеете

prefix (e) postfix

где prefix и postfix имейте тот же приоритет. Этот случай также требует круглых скобок для разрешения неоднозначности.

Моя статья, Не анализирующая Выражения с Префиксными и Постфиксными операторами, имеет синтаксический анализатор в качестве примера в спине, и можно загрузить код, но это записано в ML, таким образом, его работы не могут быть очевидны для любителя. Но целый бизнес неподвижности и так далее объяснен в мельчайших подробностях.

15
ответ дан 18 December 2019 в 09:10
поделиться

Что Вы собираетесь сделать о порядке операций?

a * b squared
2
ответ дан 18 December 2019 в 09:10
поделиться

Вы могли бы хотеть проверить Scala, который имеет своего рода уникальный подход к операторам и методам.

1
ответ дан 18 December 2019 в 09:10
поделиться

Haskell имеет, что Вы ищете.

0
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: