Денотационная семантика языка с окружениями. | MetodPro.ru

Реклама на сайте

Денотационная семантика языка с окружениями.


47. Денотационная семантика языка с окружениями.
Абстрактный синтаксис языка с окружениями
Синтаксические категории:
P  э(принадлежит)  Program
B  э  Block
D  э  Declaration
T  э  Type
C  э  Command
E  э  Exp
Be  э  BExp
I   э  Id
x   э  Var
bx  э BVar
op  э  Op
bop  э  Bop
n   э  Num
Определения:
P ::= program I is B
B ::= D begin C end
D ::= ?  | D’; D” |const I = E | var I: T | var I,I+: T | procedure I is B | procedure I (I:T) is B
T ::= integer | boolean
C ::= skip | I := E | C’ ; C” | if Be then C’ else C” | read I | write E | while Be do C’ | declare B | I | I (E)
E ::= …
Be ::= …
Связь с памятью двухступенчатая: переменная связана с адресом, а адрес со значением.
Окружения:
DV = int(Integer) + bool(Boolean) + var(Location) + Procedure
Environment: Identifier -> DV+unbound
emptyEnv I = unbound – пустое окружение
extendEnv: Environment x Identifier x DV -> Environment – расширение окружения
extendEnv (env,I,dval) I1 =  if I=I1 then dval else env(I1)
applyEnv: Environment x Identifier ->  DV+unbound
applyEnv (env,I) = env(I)
Память:
Location = {0,1,2,3…} – область адресов
Store = Location -> (SV + unused + undefined)      SV – хранимое значение
emptySto loc = unused
updateSto: Store x Location x (SV + unused + undefined) -> Store
updateSto(sto,loc,val) loc1 =  if loc=loc1 then val else sto(loc1)
applySto: Store x Identifier -> (SV + unused + undefined)
applySto(sto,loc) = sto(loc)
allocate: Store -> Store x Location  выделяет ячейку памяти
allocate sto = updateSto(sto,loc,undefined),loc)
    where loc = minimum {k|sto(k)=unused}
deallocate: Store x Location -> Store
deallocate (sto,loc) = updateSto(sto,loc,unused)
Семантические области
Integer = {…, -2, -1, 0, 1, 2, …}
Boolean = {true, false}
EV = int (Integer) + bool (Boolean)
SV = int (Integer) + bool (Boolean)
DV = EV + var (Location) + Procedure
Location = Numeral = {0,1,2,3…}
Store = Location -> (SV + unused + undefined)
Environment: Identifier -> DV+unbound
unbound – переменная, для которой нет связи
Procedure = proc0(Store -> Store) + proc1(Location -> Store -> Store)
Семантические функции
Отличие в том, что добавляются переменные, хранящие окружение
meaning : Program -> Store
perform : Block -> Environment -> Store -> Store – формирует функцию, которая отображает память на память
elaborate : Declaration -> Environment -> Store -> Environment x Store  формирует новое окружение исходя из декларации блока, запускается при входе в блок
execute : Command -> Environment -> Store -> Store
evaluate : Expression -> Environment -> Store -> EV
value : Numeral -> EV
Формирование окружения
elaborate [?]env sto = (env, sto)
elaborate [D1 D2 ] env sto = elaborate [D2] env1 sto1
where (env1, sto1) = elaborate [D2] env sto
elaborate [const I = E] env sto =
   extendEnv (env, I, evaluate [E] env sto), sto)
elaborate [var I : T]env sto =
   extendEnv (env, I, var(loc), sto1)
           where (sto1, loc) = allocate sto
elaborate [var I,L : T] env sto = elaborate [var L : T] env1 sto1
  where (env1, sto1) = elaborate [var I : T] env sto
Семантические уравнения:
execute  [S1;S2] env = (execute [S2] env ) ? (execute [S1] env)
Процедуры:
elaborate [procedure I is B] env sto = (env1, sto)
  where
       env1 = extendEnv (env,I,proc0(proc))
       proc = perform [B] env1
Если рекурсия запрещена, то  proc = perform [B] env
execute [I] env sto = proc sto
  where proc0(proc) = applyEnv( env,I)
Процедуры с параметром:
elaborate [procedure I1(I2:T) is B]env sto = (env1, sto)
where
    env1 = extendEnv (env,I1,proc1(proc))
     proc loc = perform [B] extendEnv env1 ,I2, var(loc))
execute [I(E)] env sto =
                 proc loc updateSto(sto1,loc, evaluate [E] env sto)
where proc1(proc) = applyEnv( env,I)
           (sto1,loc) = allocate sto



Методические пособия

  • Системы автоматизированного проектирования
  • Социология молодёжи
  • Общая социология
  • Криптография
  • Проектирование трансляторов
  • Компьютерная графика
  • Моделирование систем
  • Информационная безопасность
  • Теория вычислительных процессов
  • Логические основы искусственного интелекта
  • Проектирование распределённых информационных систем