Bob Syntax:

Function definition:

  define <function-name>
    ( <formal-arguments> )
    <block>

Formal arguments:

  <argument-name> [ , <argument-name> ]...
  
Method definition:

  define '[' <object> <keyword> ']'
    <block>
  define '[' <object> [ <keyword> : <argument-name> ]... ']'
    <block>

Formal argument list:

  <argument-name> [ , <argument-name> ]...
  
Block:

  { [ <local-declaration> ]... <statement>... }

Local declaration:

  local <local-variable> [ , <local-variable> ]... ;

Local variable:

  <variable-name> [ = <initial-value> ]

Statement:

  if ( <test-expression> ) <then-statement> [ else <else-statement> ] ;
  while ( <test-expression> ) <body-statement>
  do <body-statement> while ( <test-expression> ) ;
  for ( <init-expression> ; <test-expression> ; <increment-expression> )
    <body-statement>
  break [ <result-expression> ];
  continue ;
  return [ <result-expression> ] ;
  [ <expression> ] ;
  <block>
  ;

Expression:

  <expression> , <expression>
  <lvalue> = <expression>
  <lvalue> += <expression>
  <lvalue> -= <expression>
  <lvalue> *= <expression>
  <lvalue> /= <expression>
  <lvalue> %= <expression>
  <lvalue> &= <expression>
  <lvalue> |= <expression>
  <lvalue> ^= <expression>
  <lvalue> <<= <expression>
  <lvalue> >>= <expression>
  <test-expression> ? <true-expression> : <false-expression>
  <expression> || <expresssion>
  <expression> && <expression>
  <expression> | <expression>
  <expression> ^ <expression>
  <expression> & <expression>
  <expression> == <expression>
  <expression> != <expression>
  <expression> < <expression>
  <expression> <= <expression>
  <expression> >= <expression>
  <expression> > <expression>
  <expression> << <expression>
  <expression> >> <expression>
  <expression> + <expression>
  <expression> - <expression>
  <expression> * <expression>
  <expression> / <expression>
  <expression> % <expression>
  - <expression>
  ! <expression>
  ~ <expression>
  ++ <lvalue>
  -- <lvalue>
  <lvalue> ++
  <lvalue> --
  <expression> ( [ <arguments> ] )
  <expression> . <property-expr>
  <expression> '[' <expression ']'
  <message-sending-expression>
  ( <expression> )
  <variable-name>
  <literal-function>
  <literal-symbol>
  <literal-list>
  <literal-vector>
  <literal-object>
  <number>
  <string>
  nil

Property expression:

  <symbol>
  <expression>

Message sending expression:

  '[' <object> <keyword> ']'
  '[' <object> [ <keyword> <argument> ]... ']'

Literal function:

  function [ <name-string> ] ( <formal-arguments> ) <block>
  
Literal symbol:

  \ <symbol-name>

Literal list:

  \ ( [ <expression> ]... )

Literal vector:

  \ '[' [ <expression> ]... ']'

Literal object:

  \ { <object> [ <property-name> : <expression> ]... }
  
Lvalue:

  <variable-name>
  <vector-or-string-expression> '[' <expression> ']'

Global Variables:

stdin		The standard input file pointer
stdout		The standard output file pointer
stderr		The standard error file pointer

Runtime Routines:

obj = New(class);
obj = Clone(object);
list = List(element,...);
value = Cons(car,cdr);
car = Car(cons);
SetCar(cons,car);
cdr = Cdr(cons);
SetCdr(cons,cdr);
symbol = Intern(printName);
class = Class(object);
value = GetLocalProperty(object,propertyName);
length = Length(listOrStringOrVector);
Print(value[,stream]);
Display(value[,stream]);
DecodeMethod(method[,stream]);
stream = FOpen(name,mode);
Close(stream);
ch = GetC(stream);
PutC(ch,stream);
Load(filename);
Quit();
