Production |
Description |
||
---|---|---|---|
Script |
::= |
Sequence |
|
| |
Script ; Sequence |
||
Object | ::= | nil | true | false | Builtin Constant |
| |
Constname | Name of a Cocoa Constant or Class |
|
| |
self | super | app | script | argv | Builtin Runtime Variable |
|
| |
"string" |
constant NSString |
|
| |
number |
constant NSNumber (int/double) |
|
| |
Pobject |
||
Pobject |
::= |
(
Sequence ) |
directly evaluated script: {
script } eval |
| |
{
Script } |
HNSCocoaScript object |
|
| |
[
Sequence [, ...] ] |
NSMutableArray |
|
| |
[ ] |
empty NSMutableArray |
|
| |
[
Sequence:Sequence [, ...] ] |
NSMutableDictionary |
|
| |
[
: ] |
empty NSMutableDictionary |
|
| |
Monadic-Operator Object |
||
Sequence |
::= |
Object |
|
| |
Sequence [ Object ] |
objectAtIndex: |
|
| |
Sequence [: Object ] |
objectForKey: |
|
| |
Sequence Dyadic-Operator Object | dyadic operation (no precedence
rules!) |
|
| |
Sequence name |
method call (without arguments) |
|
| |
Sequence Method-Call [, Pobject ...] | method call (with optional variable argument list) | |
Method-Call |
::= |
name:Pobject | |
| |
Method-Call name:Pobject | ||
Dyadic-Operator | ::= | + | - | * | / | == | != | > | < | >= | <= | := | & | | | ^ | |
Monadic-Operator |
::= |
+ | - | ! |
Expression | Description |
---|---|
Ignored Characters | |
white space | ignored (unless part of string constant, number or symbol) |
Constants | |
nil | NSNull object |
true / false | NSNumber with boolean value YES / NO |
classname | evaluates to class constant |
NSxxx | evaluates to Cocoa constant |
5 | NSNumber with integer value 5 |
5.3 | NSNumber with double value 5.3 |
"abcdef" | NSString with value "abcdef" |
Variables | |
self |
the self reference (=argv[0]) |
super |
the superclass of the self object |
script |
the current script |
argv |
the script (method) arguments |
var | value of a variable |
var:=expr | assignment of expression result to (local) variable |
Method Calls | |
a method | [a method] |
a method:arg | [a method:arg] |
a method:(arg) x:(b) | [a method:arg x:b] converts argument to proper data type by calling [arg integerValue] etc. |
a left right |
[[a left] right] |
a left:(5) right:(3) |
[a left:5 right:3] |
(a left:(5)) right:(3) |
[[a left:5] right:3] |
Operators | |
(expr) | change order/priority of execution |
a+b | call [a CSadd:b] |
a-b | call [a CSsub:b] |
x//y | form NSPoint(x, y) |
a[x] |
[a objectAtIndex:x] |
a[:x] |
[a objectForKey:x] |
argv[i] |
access script argument (0=self,
1=_cmd) |
script eval | no argument |
script evaluate:[a] | with single argument |
script evaluate:[a, ...] | with several arguments |
Constructed Objects | |
{ statement; statement; ... } | CocoaScript-Object with statement list initialized |
[val, ...] [] |
[NSMutableArray initWithValues:val, ...] empty array |
[key:val, ...] [:] |
[NSMutableDictionary initWithValues:key, val, ...] empty dictionary |
Flow Control | |
stop | stop in debugger if in single stepping mode |
bkpt | breakpoint in debugger |
{block} loop | infinitely loop this block |
script breakLoop | exit from current loop |
script continue | restart current loop from beginning |
value return | exit from current method |
C language style expression |
CocoaScript |
---|---|
if(cond) block; | cond CSIF:block |
if(cond) block1; else block2; | cond CSIF:block1 ELSE:block2 |
while(cond) block; | { cond CSIF:{block} ELSE:{breakLoop} } loop |
for(expr1;expr2; expr3) block; |
expr1; { expr2 CSIF:{block} ELSE:{breakLoop}; expr3 } loop |
select(x) { case 1: block1; case 7: block2; default: block3; } | x CSSELECT:[1:{block1}, 7:{block2}, ...] DEFAULT:{block3} |