| Contents | Prev | Next | The T Language Specification, Version 2 Spring 2006 | 
CHAPTER 7
The sequence of execution of a T program is controlled by a sequence of statements, which are executed for their effect and do not have values.
Some statements contain other statements as part of their structure; such other statements are substatements of the statement. In the same manner, some statements contain expressions (§8) as part of their structure.
Sequences of statements are organized into blocks. There are two primary blocks defined for a T program: the main block, which is explained in section (§7.1), and statement blocks which are explained in section (§7.3).
Statements that will be familiar to C and C++ programmers are the
block (§7.3), empty (§7.4), expression (§7.5),
if (§7.6), while (§7.7),
return (§7.8), delete (§7.9)
break (§7.11) and continue (§7.12)
statements.
A program shall contain a global construct called main
(the main block), which is the designated start of the execution
of a program. Exactly one main block must exist for every T program.
The block is entered when program execution starts.
Program execution continues until a return statement in
the main block is executed or the end of the main block is reached
(or a run-time error is encountered).
If the end of the main block is reached, then the result is as if
the program executed a return of 0.
The declaration of a main block includes the definition of a return
type, which must be int.
The return value exists to provide a way to pass a single status value
to the surrounding environment.
All implementations of the main block will have the following definition:
MainFunctionDeclaration:
    int main() { MainBlockStatementsopt }
MainBlockStatements:
    MainBlockStatements MainBlockStatement
    MainBlockStatement
MainBlockStatement:
    MainVariableDeclarationStatement
    BlockStatement
	
MainVariableDeclarationStatement:
    MainVariableDeclaration ;
MainVariableDeclaration:
    Type VariableDeclarators
VariableDeclarators:
    VariableDeclarator
    VariableDeclarators , VariableDeclarator
VariableDeclarator:
    VariableDeclaratorId
VariableDeclaratorId:
    Identifier
    VariableDeclaratorId [ ]
BlockStatement:
    Statement
T does not allow for arguments to be passed into the main block.
The main block can exist at the beginning of the source file, at the end of the source file or in between any two class definitions within the source file.
Variable declarations can be provided at the outermost level of the main block (not at an inner block). The scope of a variable declared in the main block is from its declaration point to the end of the main block. It is a compile-time error for the main block to declare two variables with the same name.
There are many kinds of statements in the T programming language. Most correspond to statements in the C and C++ languages. Statements are given by the following grammar:
Statement:
    Block (§7.3)
    EmptyStatement (§7.4)
    ExpressionStatement (§7.5)
    IfThenElseStatement (§7.6)
    WhileStatement (§7.7)
    ReturnStatement (§7.8)
    DeleteStatement (§7.9)
    OutputStatement (§7.10)
    BreakStatement (§7.11)
    ContinueStatement (§7.12)
A block is a sequence of statements within braces.
Block:
    { BlockStatementsopt }
BlockStatements:
    BlockStatement
    BlockStatements BlockStatement
BlockStatement:
    Statement
A block is executed by executing each of the statements in order from
first to last (left to right).
It is possible for a block to terminate early through a return
statement.
An empty statement does nothing.
EmptyStatement:
    ;
Certain kinds of expressions may be used as statements by following them with semicolons:
ExpressionStatement:
    StatementExpression ;
StatementExpression:
    Assignment
    MethodInvocation
An expression statement is executed by evaluating the expression; if the expression has a value, the value is discarded.
if-then-else Statement
The if-then-else statement allows a conditional choice of two
statements, executing one or the other but not both. 
IfThenElseStatement:
    if ( Expression ) Statement else Statement
The Expression must have type int, or a compile-time error occurs.
An if-then-else statement is executed by first evaluating the
Expression.
Execution continues by making a choice based on the resulting value: 
else keyword) is executed.
else keyword) is executed.
while Statement
The while statement executes an Expression and
a Statement repeatedly until the value of the Expression is 0.
WhileStatement:
    while ( Expression ) Statement
The Expression must have type int, or a compile-time error occurs. 
A while statement is executed by first evaluating the
Expression.
Execution continues by making a choice based on the resulting value:
return
statement.)
If the value of the Expression is 0 the first time it is evaluated, then the Statement is not executed.
return Statement
A return statement returns control to the invoker of a method
(§5.4, §8.10), 
returns control to the invoker of a constructor (§5.5, §8.7),
returns control to the invoker of a destructor (§5.6, §7.9),
or terminates the main block (§7.1),
and is given by the following grammar:
ReturnStatement:
    return Expression ;
    return ;
Use of a return without an expression shall only be
used within a constructor or destructor.
A return with an expression in a constructor or destructor
is a compile-time error.
If a return statement is contained within a method,
the value of the Expression becomes the value of the
method invocation. More precisely, execution of such a return
statement first evaluates the Expression.
The value produced by the Expression is communicated to the invoker.
A return statement with no Expression is not allowed
in this context and will result in a compile-time error.
return statement is contained within the main block,
the value of the Expression becomes the value of the
program. More precisely, execution of such a return
statement first evaluates the Expression.
The value produced by the Expression is communicated to the
surrounding execution environment.
A return statement with no Expression is not allowed
in this context and will result in a compile-time error.
It is possible to return from the middle of a while
or if-then-else block.
A compile-time error occurs if the type of the return expression is
not convertible by assignment conversion to the return type of the
enclosing method, or
to int if the return statement is in the main block.
delete Statement
The delete statement destroys a class or array object.
DeleteStatement:
    delete Expression ;
The Expression must denote a reference to a reference type.
If not, a compile-time error is produced.
A delete that attempts to access a null reference will result in a run-time error. The use of a reference (by a delete or in any other context) that has been deleted will result in undefined behavior.
The delete statement first invokes the destructor for the
class of the object being deleted.
Destructors automatically call the destructor of its class' immediate
superclass, except for the destructor for the primordial Object
class.
The memory for the object is reclaimed after all superclass
destructors have completed.
out Statement
The out statement is a rudimentary mechanism for printing integers and it provides the only way to generate output in the T programming language.
Its syntax is described by the following grammar:
OutputStatement:
    out Expression ;
If the Expression has type int then the out
statement will print to stdout the ASCII equivalent of the integer
Expression, followed by a newline (ASCII LF) character.
All ASCII equivalents of integer expressions will be represented in decimal
with no leading 0's and a single leading "-" if the integer is
negative. 
It is a compile-time error for the Expression to have a type other
than int.
break Statement
The break statement transfers control out of an enclosing
while statement.
Its syntax is described by the following grammar:
BreakStatement:
    break ;
A break statement transfers control to the
innermost enclosing while statement of
the enclosing method or main block; this statement,
which is called the break target, then immediately exits.
If no while statement encloses the break
statement, a compile-time error occurs.
continue Statement
The continue statement transfers control to the loop-continuation
point of an enclosing while statement.
Its syntax is described by the following grammar:
ContinueStatement:
    continue ;
A continue statement transfers control to the
innermost enclosing while statement of
the enclosing method or main block; this statement,
which is called the continue target, then immediately ends the
current iteration and begins a new one.
If no while statement encloses the continue
statement, a compile-time error occurs.
| Contents | Prev | Next | The T Language Specification, Version 2 Spring 2006 | 
Author(s): Brian Mehlman (§7.1-7.5, §7.8-7.9), Yu Li (§7.6-7.7), Spring 2006 CS712/CS812 class (edits), and Phil Hatcher (§7.11-7.12).