A NesC programozási nyelv

Nyelvi elemek

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.