Gramàtica pel Llenguatge Objective-C

Gramàtica pel Llenguatge Objective-C

Aquest apèndix presenta una gramàtica formal per les extensions Objective-C del llenguatge C -- com el llenguatge Objective-C està implementat per l'entorn de desenvolupament Cocoa. Aquest afegeix a la gràmàtica de l'estàndard C trobada en l'Apèndic A de El Llenguatge de Programació C (segona edició, 1988) d'en Brian W. Kernighan i en Dennis M. Ritchie, publicat per Prentice Hall, i que ha de llegir-se juntament amb aquest llibre.

Les extensions Objective-C presenten alguns simbols nous (com és class interface), però també utilitza simbols (com són function definition) que estan explicats en la gramàtica de l'estandard C. Els símbols mencionats però que no s'explicaran aquí són els següents:

compound statement

constant

declaration

declaration-list

enum-specifier

expression

function-definition

identifier

parameter-type-list

string

struct-declaration-list

struct-or-union

typedef-name

type-name

D'aquests, identifier i string són símbols indefinits. L'Objective-C afegeix símbols indefinits dels seus propis.

Dos convencions de notació utilitzades aquí es diferencien de les usades en El Llenguatge de Programació C:

  • Els símbols literals es mostren en codi font.
  • Les claus que tanquen elements opcionals hi estan amb italica. Les claus, com altres símbols literals, estan en no-italica.

D'altra banda, aquest apèndix segueix les convencions de El Llenguatge de Programació C. Cada part de la gramàtica consisteix d'un símbol seguit per un doble punt i una llista indexada de posibilitats mutuament excloses per extendre el simbol. Per exemple:

receiver:

expression

class-name

super

Tanmateix, hi ha una excepció: Encara que sigui extrany, alguns són mutuament no exclosos, els constituents de classes, categories i protocols són llistats en linies separades per mostrar l'ordre dels elements d'una forma més clara. Per exemple:

protocol-declaration:
@protocol protocol-name
[ protocol-reference-list ]
[ interface-declaration-list ]
@end

Aquesta excepció de la regla general és fàcilment reconeguts ja que cada llista acaba amb @end.

Només hi han cuatre punts d'entrada on el llenguatge Objective-C modifica les regles definides per l'estàndard C:

  • Declaracions externes
  • Especificadors de tipus
  • Qualificadors de tipus
  • Expressions fonamentals

Aquest apèndix és així dividit en quatre seccions corresponents a aquests punts. On una regla de la gramàtica estàndard C està modificat per una extensió Objective-C, la regla sencera éstà separada en el seu formulari modificat.

Continguts:

Declaracions Externes

Especificadors de Tipus

Qualificadors de Tipus

Expressions Fonamentals

Excepcions i Sincronització


Declaracions Externes

external-declaration:
function-definition
declaration
class-interface
class-implementation
category-interface
category-implementation
protocol-declaration
protocol-declaration-list
class-declaration-list

class-interface:
@interface class-name [ : superclass-name ]
[ protocol-reference-list ]
[ instance-variables ]
[ interface-declaration-list ]
@end

class-implementation:
@implementation class-name [ : superclass-name ]
[ instance-variables ]
[ implementation-definition-list ]
@end

category-interface:
@interface class-name ( category-name  )
[ protocol-reference-list ]
[ interface-declaration-list ]
@end

category-implementation:
@implementation class-name ( category-name  )
[ implementation-definition-list ]
@end

protocol-declaration:
@protocol protocol-name
[ protocol-reference-list ]
[ interface-declaration-list ]
@end

protocol-declaration-list:
@protocol protocol-list  ;

class-declaration-list:
@class class-list ;

class-list:
class-name
class-list , class-name

protocol-reference-list:
< protocol-list >

protocol-list:
protocol-name
protocol-list , protocol-name

class-name:
identifier

superclass-name:
identifier

category-name:
identifier

protocol-name:
identifier

instance-variables:
{ instance-variable-declaration }

instance-variable-declaration:
visibility-specification
struct-declaration-list [instance-variables]
instance-variable-declaration visibility-specification
instance-variable-declaration struct-declaration-list [instance-variables]

visibility-specification:
@private
@protected
@public

interface-declaration-list:
declaration
method-declaration
interface-declaration-list declaration
interface-declaration-list method-declaration

method-declaration:
class-method-declaration
instance-method-declaration

class-method-declaration:
+ [ method-type ] method-selector ;

instance-method-declaration:
– [ method-type ] method-selector ;

implementation-definition-list:
function-definition
declaration
method-definition
implementation-definition-list function-definition
implementation-definition-list declaration
implementation-definition-list method-definition

method-definition:
class-method-definition
instance-method-definition

class-method-definition:
+ [ method-type ] method-selector [ declaration-list ] compound-statement

instance-method-definition:
– [ method-type ] method-selector [ declaration-list ] compound-statement

method-selector:
unary-selector
keyword-selector [ , ... ] 
keyword-selector [ , parameter-type-list ]

unary-selector:
selector

keyword-selector:
keyword-declarator
keyword-selector keyword-declarator

keyword-declarator:
: [ method-type ] identifier
selector : [ method-type ] identifier

selector:
identifier

method-type:
( type-name  )


Especificadors de Tipus

type-specifier:
void
char
short
int
long
float
double
signed
unsigned
id [ protocol-reference-list ]
class-name [ protocol-reference-list ]
struct-or-union-specifier
enum-specifier
typedef-name

struct-or-union-specifier:
struct-or-union [ identifier ] { struct-declaration-list }
struct-or-union [ identifier ] {  @defs ( class-name )  }
struct-or-union identifier


Qualificadors de Tipus

type-qualifier:
const
volatile
protocol-qualifier

protocol-qualifier:
in
out
inout
bycopy
byref
oneway


Expressions Fonamentals

primary-expression:
identifier
constant
string
( expression  )
self
message-expression
selector-expression
protocol-expression
encode-expression

message-expression:
[ receiver message-selector ]

receiver:
expression
class-name
super

message-selector:
selector
keyword-argument-list

keyword-argument-list:
keyword-argument
keyword-argument-list keyword-argument

keyword-argument:
selector : expression
: expression

selector-expression:
@selector ( selector-name )

selector-name:
selector
keyword-name-list

keyword-name-list:
keyword-name
keyword-name-list keyword-name

keyword-name:
selector :
:

protocol-expression:
@protocol ( protocol-name )

encode-expression:
@encode ( type-name )


Excepcions i Sincronització

exception-declarator:
declarator

try-statement:
@trystatement

catch-statement:
@catch (exception-declarator)statement

finally-statement:
@finallystatement

throw-statement:
@throw(identifier)

try-block:
try-statement
catch-statement
[ finally-statement ]

synchronize-statement:
@synchronize(identifier)

pàgina generada en: 0.683 segons.