On this page:
values-lang-v5
values-lang-v5?
interp-values-lang-v5
values-unique-lang-v5
values-unique-lang-v5?
interp-values-unique-lang-v5
imp-mf-lang-v5
imp-mf-lang-v5?
interp-imp-mf-lang-v5
proc-imp-cmf-lang-v5
proc-imp-cmf-lang-v5?
interp-proc-imp-cmf-lang-v5
imp-cmf-lang-v5
imp-cmf-lang-v5?
interp-imp-cmf-lang-v5
asm-pred-lang-v5
asm-pred-lang-v5?
interp-asm-pred-lang-v5
asm-pred-lang-v5/  locals
asm-pred-lang-v5/  locals?
interp-asm-pred-lang-v5/  locals
asm-pred-lang-v5/  undead
asm-pred-lang-v5/  undead?
interp-asm-pred-lang-v5/  undead
asm-pred-lang-v5/  conflicts
asm-pred-lang-v5/  conflicts?
interp-asm-pred-lang-v5/  conflicts
asm-pred-lang-v5/  assignments
asm-pred-lang-v5/  assignments?
interp-asm-pred-lang-v5/  assignments
nested-asm-lang-v5
nested-asm-lang-v5?
interp-nested-asm-lang-v5
block-pred-lang-v5
block-pred-lang-v5?
interp-block-pred-lang-v5
block-asm-lang-v5
block-asm-lang-v5?
interp-block-asm-lang-v5
para-asm-lang-v5
para-asm-lang-v5?
interp-para-asm-lang-v5
paren-x64-fvars-v5
paren-x64-fvars-v5?
interp-paren-x64-fvars-v5
paren-x64-v5
paren-x64-v5?
interp-paren-x64-v5
8.10
3.1.6 v5 Languages

 (require cpsc411/langs/v5) package: cpsc411-lib

values-lang-v5 : grammar?

  p ::= (module (define x (lambda (x ...) tail)) ... tail)
     
  pred ::= (relop triv triv)
  | (true)
  | (false)
  | (not pred)
  | (let ([x value] ...) pred)
  | (if pred pred pred)
     
  tail ::= value
  | (let ([x value] ...) tail)
  | (if pred tail tail)
  | (call x triv ...)
     
  value ::= triv
  | (binop triv triv)
  | (let ([x value] ...) value)
  | (if pred value value)
     
  triv ::= int64
  | x
     
  x ::= name?
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  int64 ::= int64?

procedure

(values-lang-v5? a)  boolean?

  a : any/c
Decides whether a is a valid program in the values-lang-v5 grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.

procedure

(interp-values-lang-v5 a)  any/c

  a : values-lang-v5?
Evaluates a values-lang-v5 program to a value.
  p ::= (module (define label (lambda (aloc ...) tail)) ... tail)
     
  pred ::= (relop opand opand)
  | (true)
  | (false)
  | (not pred)
  | (let ([aloc value] ...) pred)
  | (if pred pred pred)
     
  tail ::= value
  | (let ([aloc value] ...) tail)
  | (if pred tail tail)
  | (call triv opand ...)
     
  value ::= triv
  | (binop opand opand)
  | (let ([aloc value] ...) value)
  | (if pred value value)
     
  opand ::= int64
  | aloc
     
  triv ::= opand
  | label
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  aloc ::= aloc?
     
  label ::= label?
     
  int64 ::= int64?

procedure

(values-unique-lang-v5? a)  boolean?

  a : any/c
Decides whether a is a valid program in the values-unique-lang-v5 grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.
Evaluates a values-unique-lang-v5 program to a value.

imp-mf-lang-v5 : grammar?

  p ::= 
(module (define label (lambda (aloc ...) tail)) ...
        tail)
     
  pred ::= (relop opand opand)
  | (true)
  | (false)
  | (not pred)
  | (begin effect ... pred)
  | (if pred pred pred)
     
  tail ::= value
  | (call triv opand ...)
  | (begin effect ... tail)
  | (if pred tail tail)
     
  value ::= triv
  | (binop opand opand)
  | (begin effect ... value)
  | (if pred value value)
     
  effect ::= (set! aloc value)
  | (begin effect ... effect)
  | (if pred effect effect)
     
  opand ::= int64
  | aloc
     
  triv ::= opand
  | label
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  aloc ::= aloc?
     
  label ::= label?
     
  int64 ::= int64?

procedure

(imp-mf-lang-v5? a)  boolean?

  a : any/c
Decides whether a is a valid program in the imp-mf-lang-v5 grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.

procedure

(interp-imp-mf-lang-v5 a)  any/c

  a : imp-mf-lang-v5?
Evaluates a imp-mf-lang-v5 program to a value.
  p ::= 
(module (define label (lambda (aloc ...) tail)) ...
        tail)
     
  pred ::= (relop opand opand)
  | (true)
  | (false)
  | (not pred)
  | (begin effect ... pred)
  | (if pred pred pred)
     
  tail ::= value
  | (call triv opand ...)
  | (begin effect ... tail)
  | (if pred tail tail)
     
  value ::= triv
  | (binop opand opand)
     
  effect ::= (set! aloc value)
  | (begin effect ... effect)
  | (if pred effect effect)
     
  opand ::= int64
  | aloc
     
  triv ::= opand
  | label
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  aloc ::= aloc?
     
  label ::= label?
     
  int64 ::= int64?

procedure

(proc-imp-cmf-lang-v5? a)  boolean?

  a : any/c
Decides whether a is a valid program in the proc-imp-cmf-lang-v5 grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.
Evaluates a proc-imp-cmf-lang-v5 program to a value.

imp-cmf-lang-v5 : grammar?

  p ::= (module (define label tail) ... tail)
     
  pred ::= (relop opand opand)
  | (true)
  | (false)
  | (not pred)
  | (begin effect ... pred)
  | (if pred pred pred)
     
  tail ::= value
  | (jump trg loc ...)
  | (begin effect ... tail)
  | (if pred tail tail)
     
  value ::= triv
  | (binop opand opand)
     
  effect ::= (set! loc value)
  | (begin effect ... effect)
  | (if pred effect effect)
     
  opand ::= int64
  | loc
     
  triv ::= opand
  | label
     
  loc ::= rloc
  | aloc
     
  trg ::= label
  | loc
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  aloc ::= aloc?
     
  label ::= label?
     
  rloc ::= register?
  | fvar?
     
  int64 ::= int64?

procedure

(imp-cmf-lang-v5? a)  boolean?

  a : any/c
Decides whether a is a valid program in the imp-cmf-lang-v5 grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.

procedure

(interp-imp-cmf-lang-v5 a)  any/c

  a : imp-cmf-lang-v5?
Evaluates a imp-cmf-lang-v5 program to a value.

asm-pred-lang-v5 : grammar?

  p ::= (module info (define label info tail) ... tail)
     
  info ::= info?
     
  pred ::= (relop loc opand)
  | (true)
  | (false)
  | (not pred)
  | (begin effect ... pred)
  | (if pred pred pred)
     
  tail ::= (halt opand)
  | (jump trg loc ...)
  | (begin effect ... tail)
  | (if pred tail tail)
     
  effect ::= (set! loc triv)
  | (set! loc_1 (binop loc_1 opand))
  | (begin effect ... effect)
  | (if pred effect effect)
     
  opand ::= int64
  | loc
     
  triv ::= opand
  | label
     
  loc ::= rloc
  | aloc
     
  trg ::= label
  | loc
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  aloc ::= aloc?
     
  label ::= label?
     
  rloc ::= register?
  | fvar?
     
  int64 ::= int64?

procedure

(asm-pred-lang-v5? a)  boolean?

  a : any/c
Decides whether a is a valid program in the asm-pred-lang-v5 grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.

procedure

(interp-asm-pred-lang-v5 a)  any/c

  a : asm-pred-lang-v5?
Evaluates a asm-pred-lang-v5 program to a value.
  p ::= (module info (define label info tail) ... tail)
     
  info ::= (#:from-contract (info/c (locals (aloc ...))))
     
  pred ::= (relop loc opand)
  | (true)
  | (false)
  | (not pred)
  | (begin effect ... pred)
  | (if pred pred pred)
     
  tail ::= (halt opand)
  | (jump trg loc ...)
  | (begin effect ... tail)
  | (if pred tail tail)
     
  effect ::= (set! loc triv)
  | (set! loc_1 (binop loc_1 opand))
  | (begin effect ... effect)
  | (if pred effect effect)
     
  opand ::= int64
  | loc
     
  triv ::= opand
  | label
     
  loc ::= rloc
  | aloc
     
  trg ::= label
  | loc
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  aloc ::= aloc?
     
  label ::= label?
     
  rloc ::= register?
  | fvar?
     
  int64 ::= int64?

procedure

(asm-pred-lang-v5/locals? a)  boolean?

  a : any/c
Decides whether a is a valid program in the asm-pred-lang-v5/locals grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.
Evaluates a asm-pred-lang-v5/locals program to a value.
  p ::= (module info (define label info tail) ... tail)
     
  info ::= (#:from-contract (info/c (locals (aloc ...)) (undead-out undead-set-tree/rloc?)))
     
  pred ::= (relop loc opand)
  | (true)
  | (false)
  | (not pred)
  | (begin effect ... pred)
  | (if pred pred pred)
     
  tail ::= (halt opand)
  | (jump trg loc ...)
  | (begin effect ... tail)
  | (if pred tail tail)
     
  effect ::= (set! loc triv)
  | (set! loc_1 (binop loc_1 opand))
  | (begin effect ... effect)
  | (if pred effect effect)
     
  opand ::= int64
  | loc
     
  triv ::= opand
  | label
     
  loc ::= rloc
  | aloc
     
  trg ::= label
  | loc
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  aloc ::= aloc?
     
  label ::= label?
     
  rloc ::= register?
  | fvar?
     
  int64 ::= int64?

procedure

(asm-pred-lang-v5/undead? a)  boolean?

  a : any/c
Decides whether a is a valid program in the asm-pred-lang-v5/undead grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.
Evaluates a asm-pred-lang-v5/undead program to a value.
  p ::= (module info (define label info tail) ... tail)
     
  info ::= (#:from-contract (info/c (locals (aloc ...)) (conflicts ((loc (loc ...)) ...))))
     
  pred ::= (relop loc opand)
  | (true)
  | (false)
  | (not pred)
  | (begin effect ... pred)
  | (if pred pred pred)
     
  tail ::= (halt opand)
  | (jump trg loc ...)
  | (begin effect ... tail)
  | (if pred tail tail)
     
  effect ::= (set! loc triv)
  | (set! loc_1 (binop loc_1 opand))
  | (begin effect ... effect)
  | (if pred effect effect)
     
  opand ::= int64
  | loc
     
  triv ::= opand
  | label
     
  loc ::= rloc
  | aloc
     
  trg ::= label
  | loc
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  aloc ::= aloc?
     
  label ::= label?
     
  rloc ::= register?
  | fvar?
     
  int64 ::= int64?

procedure

(asm-pred-lang-v5/conflicts? a)  boolean?

  a : any/c
Decides whether a is a valid program in the asm-pred-lang-v5/conflicts grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.
Evaluates a asm-pred-lang-v5/conflicts program to a value.
  p ::= (module info (define label info tail) ... tail)
     
  info ::= (#:from-contract (info/c (locals (aloc ...)) (assignment ((aloc rloc) ...))))
     
  pred ::= (relop loc opand)
  | (true)
  | (false)
  | (not pred)
  | (begin effect ... pred)
  | (if pred pred pred)
     
  tail ::= (halt opand)
  | (jump trg loc ...)
  | (begin effect ... tail)
  | (if pred tail tail)
     
  effect ::= (set! loc triv)
  | (set! loc_1 (binop loc_1 opand))
  | (begin effect ... effect)
  | (if pred effect effect)
     
  opand ::= int64
  | loc
     
  triv ::= opand
  | label
     
  loc ::= rloc
  | aloc
     
  trg ::= label
  | loc
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  aloc ::= aloc?
     
  label ::= label?
     
  rloc ::= register?
  | fvar?
     
  int64 ::= int64?

procedure

(asm-pred-lang-v5/assignments? a)  boolean?

  a : any/c
Decides whether a is a valid program in the asm-pred-lang-v5/assignments grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.
Evaluates a asm-pred-lang-v5/assignments program to a value.

nested-asm-lang-v5 : grammar?

  p ::= (module (define label tail) ... tail)
     
  pred ::= (relop loc opand)
  | (true)
  | (false)
  | (not pred)
  | (begin effect ... pred)
  | (if pred pred pred)
     
  tail ::= (halt opand)
  | (jump trg)
  | (begin effect ... tail)
  | (if pred tail tail)
     
  effect ::= (set! loc triv)
  | (set! loc_1 (binop loc_1 opand))
  | (begin effect ... effect)
  | (if pred effect effect)
     
  triv ::= opand
  | label
     
  opand ::= int64
  | loc
     
  loc ::= reg
  | fvar
     
  trg ::= label
  | loc
     
  reg ::= rsp
  | rbp
  | rax
  | rbx
  | rcx
  | rdx
  | rsi
  | rdi
  | r8
  | r9
  | r12
  | r13
  | r14
  | r15
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  fvar ::= fvar?
     
  label ::= label?
     
  int64 ::= int64?

procedure

(nested-asm-lang-v5? a)  boolean?

  a : any/c
Decides whether a is a valid program in the nested-asm-lang-v5 grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.
Evaluates a nested-asm-lang-v5 program to a value.

block-pred-lang-v5 : grammar?

  p ::= (module b ... b)
     
  b ::= (define label tail)
     
  pred ::= (relop loc opand)
  | (true)
  | (false)
  | (not pred)
     
  tail ::= (halt opand)
  | (jump trg)
  | (begin effect ... tail)
  | (if pred (jump trg) (jump trg))
     
  effect ::= (set! loc triv)
  | (set! loc_1 (binop loc_1 opand))
     
  triv ::= opand
  | label
     
  opand ::= int64
  | loc
     
  trg ::= label
  | loc
     
  loc ::= reg
  | fvar
     
  reg ::= rsp
  | rbp
  | rax
  | rbx
  | rcx
  | rdx
  | rsi
  | rdi
  | r8
  | r9
  | r12
  | r13
  | r14
  | r15
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  aloc ::= aloc?
     
  fvar ::= fvar?
     
  label ::= label?
     
  int64 ::= int64?

procedure

(block-pred-lang-v5? a)  boolean?

  a : any/c
Decides whether a is a valid program in the block-pred-lang-v5 grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.
Evaluates a block-pred-lang-v5 program to a value.

block-asm-lang-v5 : grammar?

  p ::= (module b ... b)
     
  b ::= (define label tail)
     
  tail ::= (halt opand)
  | (jump trg)
  | (begin effect ... tail)
  | (if (relop loc opand) (jump trg) (jump trg))
     
  effect ::= (set! loc triv)
  | (set! loc_1 (binop loc_1 opand))
     
  triv ::= opand
  | label
     
  opand ::= int64
  | loc
     
  trg ::= label
  | loc
     
  loc ::= reg
  | fvar
     
  reg ::= rsp
  | rbp
  | rax
  | rbx
  | rcx
  | rdx
  | rsi
  | rdi
  | r8
  | r9
  | r12
  | r13
  | r14
  | r15
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  int64 ::= int64?
     
  fvar ::= fvar?
     
  label ::= label?

procedure

(block-asm-lang-v5? a)  boolean?

  a : any/c
Decides whether a is a valid program in the block-asm-lang-v5 grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.
Evaluates a block-asm-lang-v5 program to a value.

para-asm-lang-v5 : grammar?

  p ::= (begin s ...)
     
  s ::= (halt opand)
  | (set! loc triv)
  | (set! loc_1 (binop loc_1 opand))
  | (jump trg)
  | (with-label label s)
  | (compare loc opand)
  | (jump-if relop trg)
     
  triv ::= opand
  | label
     
  opand ::= int64
  | loc
     
  trg ::= label
  | loc
     
  loc ::= reg
  | fvar
     
  reg ::= rsp
  | rbp
  | rax
  | rbx
  | rcx
  | rdx
  | rsi
  | rdi
  | r8
  | r9
  | r12
  | r13
  | r14
  | r15
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  int64 ::= int64?
     
  fvar ::= fvar?
     
  label ::= label?

procedure

(para-asm-lang-v5? a)  boolean?

  a : any/c
Decides whether a is a valid program in the para-asm-lang-v5 grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.

procedure

(interp-para-asm-lang-v5 a)  any/c

  a : para-asm-lang-v5?
Evaluates a para-asm-lang-v5 program to a value.

paren-x64-fvars-v5 : grammar?

  p ::= (begin s ...)
     
  s ::= (set! fvar int32)
  | (set! fvar trg)
  | (set! reg loc)
  | (set! reg triv)
  | (set! reg_1 (binop reg_1 int32))
  | (set! reg_1 (binop reg_1 loc))
  | (with-label label s)
  | (jump trg)
  | (compare reg opand)
  | (jump-if relop label)
     
  trg ::= reg
  | label
     
  triv ::= trg
  | int64
     
  opand ::= int64
  | reg
     
  loc ::= reg
  | fvar
     
  reg ::= rsp
  | rbp
  | rax
  | rbx
  | rcx
  | rdx
  | rsi
  | rdi
  | r8
  | r9
  | r10
  | r11
  | r12
  | r13
  | r14
  | r15
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  int64 ::= int64?
     
  int32 ::= int32?
     
  fvar ::= fvar?
     
  label ::= label?

procedure

(paren-x64-fvars-v5? a)  boolean?

  a : any/c
Decides whether a is a valid program in the paren-x64-fvars-v5 grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.
Evaluates a paren-x64-fvars-v5 program to a value.

paren-x64-v5 : grammar?

  p ::= (begin s ...)
     
  s ::= (set! addr int32)
  | (set! addr trg)
  | (set! reg loc)
  | (set! reg triv)
  | (set! reg_1 (binop reg_1 int32))
  | (set! reg_1 (binop reg_1 loc))
  | (with-label label s)
  | (jump trg)
  | (compare reg opand)
  | (jump-if relop label)
     
  trg ::= reg
  | label
     
  triv ::= trg
  | int64
     
  opand ::= int64
  | reg
     
  loc ::= reg
  | addr
     
  reg ::= rsp
  | rbp
  | rax
  | rbx
  | rcx
  | rdx
  | rsi
  | rdi
  | r8
  | r9
  | r10
  | r11
  | r12
  | r13
  | r14
  | r15
     
  addr ::= (fbp - dispoffset)
     
  fbp ::= frame-base-pointer-register?
     
  binop ::= *
  | +
     
  relop ::= <
  | <=
  | =
  | >=
  | >
  | !=
     
  int64 ::= int64?
     
  int32 ::= int32?
     
  dispoffset ::= dispoffset?
     
  label ::= label?

procedure

(paren-x64-v5? a)  boolean?

  a : any/c
Decides whether a is a valid program in the paren-x64-v5 grammar, represented as a quoted datum. The first non-terminal in the grammar defines valid programs.

procedure

(interp-paren-x64-v5 a)  any/c

  a : paren-x64-v5?
Evaluates a paren-x64-v5 program to a value.