Nyelvi elemek
Írógép betűkkel lesz írva a nesC kód illetve a fájlnevek.
A nesC entitásait dőlt betűkkel fogjuk jelölni. Pl:”component K”.
A nesC grammatikája az ANSI C grammatikájának kiterjesztése.
Itt csak ezt a kiterjesztést szeretnénk leírni, azaz a különbségeket.
A nesC a következő új foglalt szavakat vezeti be:
as, call, command, components, configuration, event, implementation, interface, module, post, provides, signal, task, uses, includes.
Természetesen egy egyszerű C fájlban ezek nem foglalt szavak.
Ha egy nesC fájlból el szeretnénk érni egy C fájlban deklarált fenti nevet, akkor megtehetjük, csak elé kell tennünk, hogy __nesc_keyword_(pl:nesc_keyword_call).
Éppen emiatt van, hogy nem deklarálhatunk __nesc kezdetű azonosítókat egy nesC fájlban.
A TinyOS foglalt szónak tekint minden TOS_ és TOSH_ kezdetű azonosítót.
A kiterjesztések leírása
Az also kulcsszó azt jelenti, hogy egy szabályhoz egy új produktumot(a szabály jobb oldala) adunk.
A replaced by kifejezés azt jelenti,hogy kicserélünk egy C-s nyelvi szabályt egy újra.
A nesC grammatika új szabályai:
nesC-file:
includes-listopt interface
includes-listopt module
includes-listopt configuration
includes-list:
includes
includes-list includes
includes:
includes identifier-list ;
interface:
interface identifier { declaration-list }
module:
module identifier specification module-implementation
module-implementation:
implementation { translation-unit }
configuration:
configuration identifier specification configuration-implementation
configuration-implementation:
implementation { component-listopt connection-list }
component-list:
components
component-list components
components:
components component-line ;
component-line:
renamed-identifier
component-line , renamed-identifier
renamed-identifier:
identifier
identifier as identifier
connection-list:
connection
connection-list connection
connection:
endpoint = endpoint
endpoint -> endpoint
endpoint <- endpoint
endpoint:
identifier-path
identifier-path [ argument-expression-list ]
identifier-path:
identifier
identifier-path . identifier
specification:
{ uses-provides-list }
uses-provides-list:
uses-provides
uses-provides-list uses-provides
uses-provides:
uses specification-element-list
provides specification-element-list
specification-element-list:
specification-element
{ specification-elements }
specification-elements:
specification-element
specification-elements specification-element
specification-element:
declaration
interface renamed-identifier parametersopt
parameters:
[ parameter-type-list ]
Changed rules:
storage-class-specifier: also one of
command event task
declaration-specifiers: also
default declaration-specifiers
direct-declarator: also
identifier . identifier
direct-declarator parameters ( parameter-type-list )
init-declarator-list: also
init-declarator attributes
init-declarator-list , init-declarator attributes
function-definition: also
declaration-specifiersopt declarator attributes declaration-listopt compound-statement
attributes:
attribute
attributes attribute
attribute:
_attribute_ ( ( attribute-list ) )
attribute-list:
single-attribute
attribute-list , single-attribute
single-attribute:
identifier
identifier ( argument-expression-list )
postfix-expression: replaced by
primary-expression
postfix-expression [ argument-expression-list ]
call-kindopt primary ( argument-expression-listopt )
postfix-expression . identifier
postfix-expression -> identifier
postfix-expression ++
postfix-expression --
call-kind: one of
call signal post
Megjegyzések
A nesC a // -t használja megjegyzések készítéséhez mind a C, mind az interfész- illetve komponensdefiníciókban.