Link Search Menu Expand Document

Languages-beta : SIMPLE-3-Statements.cbs | PRETTY | PDF


Language "SIMPLE"

3 Statements

Syntax
  Block : block ::= '{' stmts? '}'

  Stmts : stmts ::= stmt stmts?

  Stmt : stmt ::= imp-stmt | vars-decl
    
  ImpStmt : imp-stmt ::= block
               |  exp ';'
               |  'if' '(' exp ')' block ('else' block)?
               |  'while' '(' exp ')' block
               |  'for' '(' stmt exp ';' exp ')' block
               |  'print' '(' exps ')' ';'
               |  'return' exp? ';'
               |  'try' block 'catch' '(' id ')' block
               |  'throw' exp ';'
Rule
  [[ 'if' '(' Exp ')' Block ]] : stmt =
  [[ 'if' '(' Exp ')' Block 'else' '{' '}' ]]
Rule
  [[ 'for' '(' Stmt Exp1 ';' Exp2 ')' 
       '{' Stmts '}' ]] : stmt =
  [[ '{' Stmt 
         'while' '(' Exp1 ')' 
            '{' '{' Stmts '}' Exp2 ';' '}'
     '}' ]]
Semantics
  exec[[ _:stmts ]] : =>null-type
Rule
  exec[[ '{' '}' ]] = null
Rule
  exec[[ '{' Stmts '}' ]] = exec[[ Stmts ]]
Rule
  exec[[ ImpStmt Stmts ]] = 
    sequential(exec[[ ImpStmt ]], exec[[ Stmts ]])
Rule
  exec[[ VarsDecl Stmts ]] = 
    scope(declare[[ VarsDecl ]], exec[[ Stmts ]])
Rule
  exec[[ VarsDecl ]] = effect(declare[[ VarsDecl]])
Rule
  exec[[ Exp ';' ]] = effect(rval[[ Exp ]])
Rule
  exec[[ 'if' '(' Exp ')' Block1 'else' Block2 ]] =
    if-else(rval[[ Exp ]], exec[[ Block1 ]], exec[[ Block2 ]])
Rule
  exec[[ 'while' '(' Exp ')' Block ]] = while(rval[[ Exp ]], exec[[ Block ]])
Rule
  exec[[ 'print' '(' Exps ')' ';' ]] = print(rvals[[ Exps ]])
Rule
  exec[[ 'return' Exp ';' ]] = return(rval[[ Exp ]])
Rule
  exec[[ 'return' ';' ]] = return(null)
Rule
  exec[[ 'try' Block1 'catch' '(' Id ')' Block2 ]] =
    handle-thrown(
      exec[[ Block1 ]],
      scope(
        bind(id[[ Id ]], allocate-initialised-variable(values,given)),
        exec[[ Block2 ]]))
Rule
  exec[[ 'throw' Exp ';' ]] = throw(rval[[ Exp ]])