В чем принципиальное различие между семантикой малых и больших операций?
Я с трудом понимаю, что это такое, и мотивация для того и другого.
semantics
operational-semantics
small-step-semantics
Саймон Морган
источник
источник
x = 0; while ( true ) { x = x + 1; }
?Ответы:
Семантика малого шага определяет метод для вычисления выражений по одному шагу вычисления за раз. Формально говоря, семантика малого шага для языка выраженийE - это отношение →:E×E называемое отношением редукции . Семантика малого шага подробно описывает, что происходит с выражением. Он может дать точный отчет даже о не завершающихся программах с бесконечной цепочкой e0→e1→e2→… . Завершающая программа - это такая программа, что e0→e1→⋯→v v ∀e′∈E,v↛e′
На другом конце спектра находится денотационная семантика . Денотационная семантика присваивает «значение» каждому выражению. Это функция от выражений до обозначений: ( называется областью). Пространство обозначений может быть совершенно не связано с синтаксическим пространством, например, может быть выражением, которое оценивается как число, а может быть набором чисел, таким как или .[[⋅]]:E→D D E D N R
Семантика большого шага находится посередине. A большого шаг семантика на языке выражений и набор значений есть отношение . Он связывает выражение с его значением (возможно, несколькими значениями, если язык недетерминирован). Часто специальное значение используется для не заканчивающихся выражений.E V ⇓:E×V ⊥
Итак, почему у нас есть эти три понятия? Все эти понятия могут моделировать друг друга, но модель добавляет степень сложности.
С практической точки зрения семантика малых шагов соответствует просмотру каждой операции, выполняемой переводчиком для языка. Семантика большого шага смотрит только на полученное значение. Денотационная семантика рассматривает математическую интерпретацию, которая может иметь или не иметь никакого отношения к тому, что происходит на компьютере.
Семантика малых шагов - самая очевидная. Он четко предоставляет полезную информацию о программах без прерывания. В более общем плане он предоставляет подробную информацию о поведении программы.
Денотационная семантика превращает синтаксические конструкции в произвольные математические объекты; он может выражать все, что хотят ученые (вы можете определить обозначение выражения как все возможные цепочки сокращения из него), но за счет добавления уровня сложности. Он используется, когда мы хотим абстрагироваться от некоторых деталей, например, как именно вычисляется выражение.
Семантика большого шага находится посередине: она абстрагирует детали оценки, но сохраняет синтаксическую природу результата. Обычно эта концепция используется, когда есть базовая семантика малого шага, как способ кратко выразить: « »как« ». В таких конструкциях, хотя понятия очень разные (одна позволяет нам говорить об отдельных этапах вычислений и о не завершающихся программах, другая нет), определения будут выглядеть очень похоже, потому что в этом случае правила, определяющие семантика большого шага в основном имеет вид «если и… и и∃(e1,…,en),e→e1→…en and ∄e′,en→e′ e⇓en e1→∗e2 en→∗v v это значение тогда ”.e1⇓v
источник
3
в((2+1)+1)⇓3
я предполагаю , что «денотационной» некоторый конец все значения, но в том, что экземпляр будет «большой шаг» не обязательно карту непосредственно к этому? Различие имеет какое-то отношение к контексту, например, в(a + 1)
зависимости от среды, которая содержитa
?3